Có một chức năng tiêu chuẩn hóa để thực hiện điều này: Element.closest . Hầu hết các trình duyệt ngoại trừ IE11 đều hỗ trợ nó ( chi tiết theo caniuse.com ). Tài liệu MDN cũng bao gồm polyfill trong trường hợp bạn phải nhắm mục tiêu các trình duyệt cũ hơn.
Để tìm tbodycha mẹ gần nhất thbạn có thể làm:
th.closest('tbody');
Trong trường hợp bạn muốn tự viết hàm - đây là những gì tôi đã nghĩ ra:
function findClosestParent (startElement, fn) {
var parent = startElement.parentElement;
if (!parent) return undefined;
return fn(parent) ? parent : findClosestParent(parent, fn);
}
Để tìm cha mẹ gần nhất theo tên thẻ, bạn có thể sử dụng nó như sau:
findClosestParent(x, element => return element.tagName === "SECTION");