cha mẹ jQuery của cha mẹ


93

Tôi hiện đang cố gắng tìm cha mẹ của một phần tử. Tôi có một liên kết đang được nhấp vào <td>, và tôi muốn lấy <tr>đối tượng.

Tại sao "$ (this) .parent (). Parent ()" không hoạt động? Điều gì sẽ?

Cảm ơn,
Brendan

Chỉnh sửa: Có vẻ như một lỗi trong cú pháp của tôi đã làm hỏng toàn bộ. "$ (this) .parent (). parent ()" trên thực tế hoạt động, nhưng tôi buộc phải sử dụng $ (this) .closest ('tr') "vì nó có vẻ là giải pháp hiệu quả nhất.


1
bạn có thể đăng mã để chúng tôi có thể xem tại sao bộ chọn mẹ của bạn không hoạt động không?
TStamper

Câu trả lời:


221

Cách tốt nhất có thể là sử dụng closest:

$(this).closest('tr');

Kiểm tra tài liệu :

Closest hoạt động bằng cách đầu tiên nhìn vào phần tử hiện tại để xem liệu nó có khớp với biểu thức được chỉ định hay không, nếu có, nó chỉ trả về chính phần tử đó. Nếu nó không khớp thì nó sẽ tiếp tục duyệt qua tài liệu, từng phần tử, cho đến khi tìm thấy một phần tử khớp với biểu thức đã chỉ định. Nếu không tìm thấy phần tử phù hợp thì sẽ không có phần tử nào được trả về.


20

Nó sẽ hoạt động. Bạn cũng có thể dùng thử $ (this). Parent (tag), trong đó tag là thẻ bạn muốn tìm.

Ví dụ:

$(this).parents("tr:first")

Sẽ tìm thấy tr gần nhất "lên chuỗi".


9

Điều đó sẽ hoạt động ... bạn có thể thử

$(this).parents(':eq(1)');

. Cha mẹ (bộ chọn) cho biết lấy tất cả các tổ tiên phù hợp với bộ chọn

và: eq (1) cho biết tìm phần tử thứ nhất (không lập chỉ mục, vì vậy phần tử thứ hai) trong danh sách


Bạn có thể thử cảnh báo điều này, để đảm bảo rằng nó là một thẻ liên kết html. Hãy thử làm: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

Đoạn mã này đã thực hiện cho tôi trong quá khứ:

$(this).parent().parent(); 

Đăng một số mã cho chúng tôi để xem liệu có thể có sự cố khác ở đâu đó ...


Tôi đồng ý với điều này. Tôi có thể sử dụng $(this).parent().parent()mà không vấn đề
DrewT


2

Nếu bạn có bất kỳ loại id / class nào cho cha mẹ, bạn có thể sử dụng cha mẹ () nhưng điều đó sẽ cung cấp cho bạn tất cả cha mẹ cho đến <body> trừ khi bạn lọc () hoặc dừng nó theo cách khác như

$(this).parents('.myClass');

Hy vọng điều này sẽ giúp ai đó :)


1

Hãy thử gói $ (this) .parent () vào một đối tượng jQuery như $ ($ (this) .parent ()) Tôi thường thấy cần phải làm điều này để đảm bảo rằng tôi có một đối tượng jquery hợp lệ. Từ đó, bạn sẽ có thể nắm được cha mẹ của cha mẹ, hoặc sử dụng có lẽ trước ().


8
Điều này là hoàn toàn vô nghĩa. Tất cả các bạn đang làm là lãng phí thời gian bằng cách tạo ra một đối tượng jQuery ...
James

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

0

.closest() không phải lúc nào cũng là lựa chọn tốt nhất, đặc biệt khi bạn có cùng cấu trúc phần tử.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Bạn có thể làm cha mẹ của cha mẹ và rất dễ dàng:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

Vân vân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.