Javascript 按标记获取最近的上一个兄弟
我有jQuery的分层复选框,如下所示 我的html:Javascript 按标记获取最近的上一个兄弟,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我有jQuery的分层复选框,如下所示 我的html: <ul class='tristate'> <li> <input type='checkbox' /> <label /> <ul> <li> <input type='checkbox' /> <label /> &l
<ul class='tristate'>
<li>
<input type='checkbox' />
<label />
<ul>
<li>
<input type='checkbox' />
<label />
</li>
<li>
<input type='checkbox' />
<label />
<ul>
<li>
<!--can be more in the hierarchy -->
</li>
</ul>
</li>
</ul>
这与我目前在应用程序中的加价是一致的,但是
我希望在遍历父复选框时使代码更加健壮。具体来说-.filter('ul').prev('label').prev('input:checkbox')
表示输入必须紧跟在标签之前,标签必须紧跟在输入之前
我想要的是一个类似于closest
的命令,它遍历同级而不是祖先,这样我就可以编写类似.filter('ul').prevenest('input:checkbox')
编辑-警告
对于遇到此问题并希望在复选框层次结构中使用代码的任何人,请小心。我的逻辑有缺陷。祖父母必须检查他们所有的孩子。这段代码不会这样做。jQuery返回前面的所有元素(可以选择匹配选择器)。它按顺序返回它们,从最靠近元素到最远
由于您只需要第一个匹配项,因此只需选择找到的第一个元素:
$source
.parentsUntil(".tristate")
.filter('ul')
.prevAll('input:checkbox')[0]
您还可以添加一个
.length>0
条件,以检查前面的任何元素是否与您的选择器匹配。我们可以尝试以下代码循环遍历所有ul元素并找到最近的复选框
var ulCol = $(this).parentsUntil(".tristate").filter('ul');
ulCol.each(function(){
$(this).prevAll('input:checkbox:first').prop({
indeterminate: indeterminate,
checked: checked && !indeterminate
});
});
关于
$(这个).parentsUntil(“.tristate”).filter('ul').prevAll('input:checkbox').first()
是$(这个).最近的('.tristate').find('input:first'))
你在找什么?@Taleeb-看我对安吉拉的评论answer@j08691不,我要查找层次结构中复选框的所有“祖先”复选框,而不仅仅是顶层复选框。但它们不是直系祖先,因为层次结构是使用ListHanks定义的,我没有意识到元素是从最接近的兄弟开始按顺序返回的。不幸的是,这里的缺陷是有一个ul
元素的层次结构,我们需要为所有元素找到最近的前兄弟。使用.first()
或[0]
只能找到一个元素。糟糕的是,我没有意识到这一点。在这种情况下,我将迭代ul元素(例如jquery的每个元素),并为每个元素获取最近的previous。对不起,我解释得再清楚不过了,我现在不在电脑前。
var ulCol = $(this).parentsUntil(".tristate").filter('ul');
ulCol.each(function(){
$(this).prevAll('input:checkbox:first').prop({
indeterminate: indeterminate,
checked: checked && !indeterminate
});
});