在jQuery中获得下一个兄弟的最干净的方法

时间:2011-06-04 15:38:24

标签: jquery jquery-selectors

http://jsfiddle.net/mplungjan/H9Raz/

经过下一次('a')等测试后,我终于找到了一个有效的测试。 我只是想知道为什么下一个('a')没有,或者最接近或类似。在我点击复选框后,是否有更简洁的方法来获取链接的href?

$('form input:checkbox').click(function () {
 alert($(this).nextAll('a').attr("href"));
}); 
<form>
  <div>
    <input type="checkbox" name="checkThis" value="http://www.google.com" />Check here<br/>
    <a href="http://www.google.com">click here</a><br>   
    <input type="checkbox" name="checkThis" value="http://www.bing.com" />Check here<br/>
    <a href="http://www.bing.com">click here</a>       
  </div>
</form>

3 个答案:

答案 0 :(得分:45)

详细说明上述评论:

无法写:

  • next("a"),因为next()仅尝试匹配下一个元素。它将点击<br>元素并且不匹配任何内容。

  • closest("a"),因为closest()从元素本身开始走向祖先链,因此会错过<a>元素。

可以写:

    正如Arend建议的那样,
  • next().next()。这可能是最快的解决方案,但它使<br>元素成为强制性的。

  • nextAll("a"),但这可以返回多个元素(并且将使用您的标记示例)。链接到first()会阻止它,但nextAll()仍然必须迭代所有下一个兄弟,这可能会使其变慢,具体取决于<div>元素内标记的复杂性。 / p>

  • nextUntil("a").last().next(),它只迭代下一个兄弟,直到找到一个链接,然后返回匹配的最后一个元素的下一个兄弟。 可能nextAll()更快,这取决于你的标记。

答案 1 :(得分:0)

或者,您可以使用jQuery内置函数.siblings()

https://api.jquery.com/siblings/

答案 2 :(得分:0)

以下代码为我工作

  

$(&#39; #id~iframe&#39;);