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

mpl*_*jan 37 jquery jquery-selectors

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

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

$('form input:checkbox').click(function () {
 alert($(this).nextAll('a').attr("href"));
}); 
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

Fré*_*idi 52

详细说明上述评论:

不能写:

  • next("a"),因为next()只是尝试匹配下一个元素.它将击中<br>元素并且不匹配.

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

可以写:

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

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

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