简体   繁体   English

使用jQuery为嵌套列表元素添加计数类

[英]Add count classes for nested list elements with jQuery

I have this HTML: 我有这个HTML:

  <ul class="parent">
    <ul>
      <li>
        <ul></ul>
      </li>
      <li>
        <ul>
          <li>
            <ul></ul>
          </li>
        </ul>
      </li>
    </ul>
  </ul>

I need to add count classes for all nested lists in this markup, to reach this: 为此,我需要为所有嵌套列表添加计数类:

  <ul class="parent">
    <ul class="level-1">
      <li>
        <ul class="level-2"></ul>
      </li>
      <li>
        <ul class="level-2">
          <li>
            <ul class="level-3"></ul>
          </li>
        </ul>
      </li>
    </ul>
    <ul class="level-1">
      <li>
        <ul class="level-2"></ul>
      </li>
      <li>
        <ul class="level-2">
          <li>
            <ul class="level-3"></ul>
          </li>
        </ul>
      </li>
    </ul>
  </ul>

So i do this: 所以我这样做:

var parent_ul = $('.parent');

if (parent_ul.doesExist()){
    var parent_ul_lists = parent_ul.find('ul');

    parent_ul_lists.each(function(){
        var i;
        for (i = 0; i < parent_ul_lists.length; i++) {
            $(this).eq(i).addClass('level-' + i);
        }
    })
}

But in output i have class test level-1 for all of parent list childrens. 但是在输出中,我对所有父母名单上的孩子都进行了level-1课堂测试。 Can anybody help? 有人可以帮忙吗?

Try this 尝试这个

$('.parent ul').addClass(function(){
   return "level-"+$(this).parents('ul').length;
});

DEMO 演示

Try this 尝试这个

 var parent = $('.parent').children();
    next = parent;
    var i = 0;
    while (next.length) {
        parent = next;

        parent.addClass("Level_" + i);
        i++;
        next = next.children();
    }

Demo 演示版

You can use this; 您可以使用它;

var parent_ul = $('.parent');


var parent_ul_lists = parent_ul.find('ul');

parent_ul_lists.each(function(){
    $(this).addClass('level-'+ ($(this).parents().length -1)/2);

});

See working demo here: http://jsfiddle.net/huseyinbabal/qmGcC/ 在此处查看工作演示: http : //jsfiddle.net/hus​​eyinbabal/qmGcC/

Note: Inspect element in output to see class assigned 注意:检查输出中的元素以查看分配的类

You need some good 'ole recursion! 您需要一些很好的“ ole递归”!

Check out this JSFiddle UPDATE: corrected jsFiddle link 出此JSFiddle UPDATE:更正了jsFiddle链接

Here is the code: 这是代码:

function labelChildUL(element, count) {
    element.children().each(function (index, value) {
        var $me = $(value);
        if ($me.is("ul")) {
            $me.addClass("level-" + (count + 1));
            labelChildUL($me, count + 1);
        }
        else
        {
            labelChildUL($me, count);
        }
    });
}

$(document).ready(function () {
    var $parent = $('#parent');
    labelChildUL($parent, 0);
});

I also updated your html to use id instead of class for "parent": 我还更新了您的html,以使用id代替“ parent”的class

<ul id='parent'>
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM