2009-07-07 43 views
5

我想通過使用它的一個嵌套元素的ID,使用JQuery來訪問一個元素。例如:我需要從嵌套的'searchBox'元素中找到'myDiv'。問題是層次結構發生變化,searchBox不會總是處於相同的嵌套位置。所以我基本上需要一些東西說:給我包含ID爲'searchBox'的元素的DIV(見下)任何建議? 謝謝!JQuery - 從一個嵌套元素獲取父div 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> 

回答

10

如果你想找到包裝DIV元素(無論對DIV的ID),那麼你會希望這個jQuery選擇:

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

的C losest([selector]) function會發現包裝元素匹配選擇器。

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

-1 parent()將不起作用。 – Wayne 2009-07-07 04:16:08

+0

父母(注意's')將工作 – CMS 2009-07-07 04:21:17

+0

0我的不好。我一定錯過了「s」。 – Wayne 2009-07-07 04:37:18

0

您可以使用此:

var searchBox = $('#searchBox'); 

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

完整的文檔是available here

+0

順便說一句,使用nodeName#id比只指定ID – redsquare 2009-07-07 05:27:47

2

如果您知道身份證,並記住身份證必須是唯一的,只需像平常一樣抓住元素 即可。

​​

沒有使用。家長如上面顯示的答案,因爲它是因爲它得到的層次結構中所有的父母和過濾器的方式,而不是使用的getElementById只是慢的好處。 例如,如果您只知道className,那麼您最好使用.closest('div.class'),因爲它會逐個逐個逐個查找,直到找到匹配項。

唯一的時候你會使用.closest是如果你想確保searchBox確實是你的元素的父母。

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

您可以使用

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

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

複雜的嵌套例如:

通過點擊-N2找到-N1的文本值!?

解決方案:

<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:

變種A-N1 = $(本).closest(」 UL-N1。李-N1。 「)找到(」 A-N1。 「)。文本();