jQuery中,如何选择具有属性的最近兄弟元素(向前或向后)?

4

我有一个类似下面标记的选择下拉菜单。

<select class="myselect" name="myname">
  <option value="0" disabled="disabled">0</option>
  <option value="1" disabled="disabled">1</option>
  <option value="2" disabled="disabled">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7" selected="selected" disabled="disabled">7</option>
</select>

我正在尝试使用jQuery选择最接近的“启用”兄弟元素来选择“已选”元素。在上面的例子中,我想选择选项6。我意识到我可以使用.prev(),但那只能往上走。有时用户选择了较小的数字,我需要选择next()选项。谢谢您的帮助!

为什么不使用next()?你是从“#selected”开始遍历吗? - tay10r
3
你可以使用 closest() - Quicksilver
谢谢,如果我从选项0开始,那么next(':enabled')就可以工作,但如果我从选项7开始就不行了。对于closest(':enabled'),它会沿着DOM向上查找,而不是在同级元素中查找。 - Nick Burdick
3
不,closest选择最近的父元素。 - Ram
"closest" 的命名有误导性,它会检查父级和自身。 - pickypg
兄弟姐妹怎么样(“:enabled”)? - tay10r
2个回答

1
一种选择是使用nextAllprevAll方法,您可以检查所选元素的长度,如果下一个未禁用元素存在,则选择该元素,否则选择最接近的前一个未禁用元素。
var $o = $('.myselect option'),
    $s = $o.filter(':selected'),
    $next = $s.nextAll(':not(:disabled)').first();

if ($next.length) $next.foo();
else $s.prevAll(':not(:disabled)').first().bar();

http://jsfiddle.net/DsWh6/


0

你应该能够在事件函数中使用:

if( $( this ).val( ) == 7 ){

    $( enabledNode ) = $( this ).parent( ).first( ); // which brings you to val 1

    ... validation here

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接