Пронумеровать список

293
30 сентября 2017, 22:10

Есть список и нужно его пронумеровать. Под пронумеровать подразумевается добавление классов: во 2 уровне ul, например, сlass_2, в 3 уровне ul - сlass_3. Должно получится что-то типа такого.

Предполагаю, решение кроется в jQuery, но точно не знаю как сделать.

<ul  class="class_1">
   <li>
      <ul class="class_2">
         <li></li>
         <li>
            <ul class="class_3">
               <li></li>
               <li></li>
               <li></li>
               <li></li>
            </ul>
         </li>
         <li></li>
         <li></li>
         <li></li>
      </ul>
   </li>
   <li>
      <ul class="class_2">
         <li></li>
         <li>
            <ul class="class_3">
               <li></li>
               <li></li>
               <li></li>
               <li></li>
            </ul>
         </li>
         <li>
            <ul class="class_3">
               <li></li>
               <li></li>
               <li></li>
               <li></li>
            </ul>
         </li>
         <li>
            <ul class="class_3">
               <li></li>
               <li></li>
            </ul>
         </li>
         <li></li>
      </ul>
   </li>
   <li></li>
</ul>
Answer 1

Например, так

function setClass(AList) { 
  var level = AList.data('level'); 
  if (level) 
    return level; 
  var parent = $(AList.parent().closest('ul')); 
  if (parent.length) 
    var level = setClass(parent) + 1; 
  else 
    var level = 1; 
  AList.addClass('class_' + level).data({level: level}); 
  return level; 
} 
 
$('ul:not(:has(ul))').each(function() { 
  setClass($(this)); 
});
.class_1 { 
  background-color: red; 
} 
 
.class_2 { 
  background-color: green; 
} 
 
.class_3 { 
  background-color: blue; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<ul> 
   <li> 
      <ul> 
         <li></li> 
         <li> 
            <ul> 
               <li></li> 
               <li></li> 
               <li></li> 
               <li></li> 
            </ul> 
         </li> 
         <li></li> 
         <li></li> 
         <li></li> 
      </ul> 
   </li> 
   <li> 
      <ul> 
         <li></li> 
         <li> 
            <ul> 
               <li></li> 
               <li></li> 
               <li></li> 
               <li></li> 
            </ul> 
         </li> 
         <li> 
            <ul> 
               <li></li> 
               <li></li> 
               <li></li> 
               <li></li> 
            </ul> 
         </li> 
         <li> 
            <ul> 
               <li></li> 
               <li></li> 
            </ul> 
         </li> 
         <li></li> 
      </ul> 
   </li> 
   <li></li> 
</ul>

Идея:

  • вначале выбираем все списки, которые не имеют дочерних списков $('ul:not(:has(ul))').
  • Затем для каждого из этих списков рекурсивно ищем родительский, чтобы узнать на каком уровне мы находимся
  • все вычисленные уровни сохраняем, чтобы не вычислять для одного и того же элемента дважды
Answer 2

Достаточно просто пробежаться по всем первым потомкам каждого ul-a, предварительно установив класс для первого ul-a.

https://jsfiddle.net/lermon333/ep9wh2v9/

var index = 1;
var first = $('ul').first();
first.addClass(index + "_class");
index += 1;
setClass(first, index);
function setClass(parent, index) {
  firstUlChilds = parent.find(">li>ul");
  firstUlChilds.addClass(index + "_class");
  index += 1;
  if (firstUlChilds.length) {
    firstUlChilds.each(function(i, el){
      setClass($(el), index);
    })
  }
}
READ ALSO
Адаптивная карусель

Адаптивная карусель

Здравствуйте, где достать адаптивный слайдер с эффектом 3D, чтобы сверстать примерно такую карусель http://takems/dXsYK

195
Запрос с данными JSON

Запрос с данными JSON

Возможно ли сделать так, чтобы отправлялся запрос с данными JSON на апи сайта, и там он искал с точностью похожие элементы, чтобы вы лучше поняли...

239
как отправить данные из textarea

как отправить данные из textarea

сори за глупый вопросне могу понять, как считать текст из textarea

359
Подскажите как убрать обводку браузера?

Подскажите как убрать обводку браузера?

Вот так почему-то отображается после нажатия на ссылку, как убрать?

370