Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按标记获取最近的上一个兄弟_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 按标记获取最近的上一个兄弟

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

我有jQuery的分层复选框,如下所示

我的html:

<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
        });
    });