2013-03-18 110 views
4

我想使用jquery最接近的命令找到一個特定的元素的基礎上,如果該元素有一個特定的兄弟姐妹。我一直在玩不同的選擇器,但一直沒有找到能夠做到我想要的東西。使用jquery最接近()找到最近的元素與已知的兄弟

因此,舉例來說,如果結構是類似以下內容

<div> 
    <table> 
     <tr> 
      <td> 
        <span a>cell 1</span> 
        <span>cell 2</span> 
      </td> 
      <td siblingmatch="true"> 
        <span b>cell 1</span> 
        <span>cell 2</span> 
      </td> 
     </tr> 
    </table> 

    <span siblingmatch="true">test 1</span> 
</div> 

如果我跑最接近從標有跨度開始,我希望它返回它的父TD,因爲它有一個兄弟標與siblingmatch屬性一起使用。但是,如果我從用b標記的區段開始運行相同的命令,我希望它返回表標記,因爲這是它與兄弟標記爲siblingmatch屬性時找到的第一個父代。

+1

您是否有真正的問題? – 2013-03-18 17:51:25

+1

顯示你一直在玩的jquery代碼。它會提供更多的工作。 – gotohales 2013-03-18 17:53:58

+1

@undefined我認爲''(和b)僅僅是示例性的以指示代碼之後的文本。 – 2013-03-18 17:54:38

回答

3

您可以使用parentsfilter方法。

$('span').click(function(){ 
    var matched = $(this).parents().filter(function(){ 
     return $(this).siblings('[siblingmatch]').length; 
    }).first(); 
}); 

http://jsfiddle.net/WW5qL/

注意siblingmatch是不是一個有效的屬性,你可以使用HTML5代替data-*屬性。

+0

是的,siblingmatch不是實際的屬性名稱,只是這個例子。 我跑你的例子,這似乎返回我想要的。我注意到你沒有在你的代碼中使用最接近的()函數,而是使用父過濾器。有沒有理由使用一個vs另一個,我可以用最接近的()做同樣的事情嗎? – bbeaudet 2013-03-18 20:12:57

+0

迴應我自己的評論:closest()不支持函數,所以需要一個選擇器,這是我掙扎的地方。父母()。filter()允許一個函數,這樣可以提供更多的靈活性。 – bbeaudet 2013-03-18 20:28:21

+1

@bbeaudet'nearest'只返回匹配的父元素(_specified by selector_),這不是一個有用的方法在這裏使用vs'parents'返回所選元素的所有父元素(大部分時間我不使用這個function_),它允許過濾它們。請注意,這兩個函數都不接受'function',使用'filter'是jQuery提供的可鏈接性。 – undefined 2013-03-18 20:35:49