2009-07-07 35 views
5

tôi đang cố gắng truy cập một phần tử bằng cách sử dụng một ID của một trong các thành phần lồng nhau của nó, bằng cách sử dụng JQuery. Ví dụ: tôi cần phải tìm 'myDiv' từ phần tử 'searchBox' lồng nhau của nó. Vấn đề là thứ bậc thay đổi và hộp tìm kiếm sẽ không phải lúc nào cũng ở cùng một vị trí lồng nhau. vì vậy tôi về cơ bản cần một cái gì đó mà nói: Hãy cho tôi DIV có chứa các yếu tố với ID của 'searchBox'. (xem bên dưới) Bất cứ đề nghị? Cảm ơn!JQuery - lấy div cha từ một mã phần tử lồng nhau ID

<div id="myDiv" class="CommonGridView_ListBoxPopupPanel"> 
Some text here : 
<table><tbody><tr><td><input class="tboxw" type="text" id="btnFind"/></td> 
<td>some content</td> </tr> 
<tr> <td><textarea id="searchBox">text area content</textarea> </td> 
</tr> 
</tbody> 
</table> 
<table><tr><td></td></tr></table> 
</div> 

Trả lời

10

Nếu bạn muốn tìm các yếu tố gói DIV (không phụ thuộc vào ID trên DIV đó) sau đó bạn sẽ muốn chọn jQuery này:

$("#searchBox").closest("div"); 

Các c losest([selector]) function sẽ tìm thấy những yếu tố gói đó khớp với công cụ chọn.

+0

"Chức năng gần nhất ([selector]) sẽ tìm tất cả các phần tử gói khớp với bộ chọn." - không, nó sẽ chỉ tìm thấy cái gần nhất. gần nhất sẽ không bao giờ trả về> 1 phần tử. –

+0

Cảm ơn bạn đã làm rõ Paolo - Tôi đã nhầm lẫn về câu trả lời gần nhất và đã chỉnh sửa của tôi. –

+0

Không sao, tôi cũng thực sự bỏ lỡ: gần nhất có thể trả về> 1 nếu phần $ (selector) của nó trả về hơn 1 phần tử (nó sẽ trả về gần nhất của mỗi phần tử chọn) –

6
$('#searchBox').parents('#myDiv') 
+0

-1 cha mẹ() sẽ không hoạt động. – Wayne

+0

cha mẹ (thông báo 's') sẽ làm việc – CMS

+0

0 xấu của tôi. Tôi phải bỏ lỡ "s". – Wayne

0

Bạn có thể sử dụng này:

var searchBox = $('#searchBox'); 

// Have the searchBox jQuery object, so find the ancestors that match a specific selector. 
var parentDiv = searchBox.parents('div#myDiv'); 

Các tài liệu đầy đủ là available here.

+0

btw, sử dụng nodeName # id chậm hơn so với chỉ định id – redsquare

+0

@redsquare: Nó thực sự không phải là, jQuery được tối ưu hóa để tha thứ cho lỗi này và chỉ tìm ID. (Tôi hỏi John Resig về điều này) –

+0

Tôi đã thử nghiệm nó bản thân mình và có thể đảm bảo với bạn nó được. Sẽ làm một bản demo khi tôi làm việc. – redsquare

2

Nếu bạn biết id và id ghi nhớ phải là duy nhất, chỉ cần lấy phần tử như bình thường.

var $parentDiv = $('#searchBox'); 

Không có lợi ích từ việc sử dụng .parents như các câu trả lời trên chương trình vì nó chỉ là chậm như nó được tất cả các phụ huynh trong hệ thống phân cấp và các bộ lọc này thay vì sử dụng getElementById. Nếu ví dụ bạn chỉ biết className thì tốt nhất bạn nên sử dụng .closest('div.class') vì các bước đó mỗi bậc cha mẹ ở trên từng cái một cho đến khi tìm thấy kết quả phù hợp.

Lần duy nhất bạn sẽ sử dụng .closest là nếu bạn muốn đảm bảo rằng searchBox thực sự là phụ huynh của phần tử của bạn.

if ($element.closest('#searchBox').length){ 
    //do something 
} 
+0

+1 để chỉ thông tin chính xác. :) –

+0

Đã hỏi John Resig lần nữa về thẻ # id, anh ấy nói nó hoạt động như mong đợi. Lý do có nhiều cuộc gọi xảy ra hơn là vì nó cũng phải kiểm tra nodeName, vì vậy bạn có thể làm theo lý thuyết khoảng # myid và div # myid (không phải cùng một lúc) - tôi vẫn không hiểu tại sao nó lại quá nhiều nhiều cuộc gọi hơn, nhưng anh ấy nói nó ổn vì vậy tôi có khuynh hướng tin anh ấy. –

+0

Nhưng nếu tôi không biết ID của DIV, thì chỉ có phần tử con? – 29er

1

Bạn có thể sử dụng

$('#searchBox').parents('div:first') 

hoặc

$('#searchBox').parents('div:eq(0)') 
0

Complex dụ lồng nhau:

tìm giá trị văn bản của một-N1 bằng cách nhấp vào một-N2 !!?

Giải pháp:

<ul class="ul-N1"> 
     <li class="li-N1"> 
      <a class="a-N1"></a> 
      <ul class="ul-N2"> 
       <li class="li-N2"> 
        <a class="a-N2"> </a> 
       </li> 
      </ul> 
     </li> 
    </ul> 

Jquery:

var a-N1 = $ (this) .closest (" ul-N1 .li-N1. ") Tìm (" một-N1.. ").bản văn();

Các vấn đề liên quan