Ориентация только на родителя "li" и игнорирование других детей "li's" - PullRequest
1 голос
/ 06 сентября 2011

Я знаю, что близок к сортировке, но я уверен, что есть лучший способ добиться следующего:

Я хочу нацелиться на 'li's', у которых есть дочерний элемент 'ul', и добавить интервал следующим образом:

<li class="parent">
 <a>Item 1 <span> </span></a>

  <ul>
    <li></li>
    <li></li>
  </ul>
</li>

Вот jQuery, который я пытаюсь использовать:

jQuery(document).ready(function(){
jQuery('ul').attr("id", "nav");
jQuery("ul#nav li:has(ul)").addClass("hasChildren");    
if (jQuery('ul#nav li.hasChildren').length)
{
    jQuery('ul#nav li.hasChildren a').append("<span></span>");
}
});

Проблема в том, что диапазон добавляется ко всем 'li' независимо от того, есть ли в них sub ul или нет.

Так что мой вопрос в том, как добавить пролет ТОЛЬКО к ли, у которых есть подчиненный элемент, а не ко всем лиям

Gary

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Проблема в вашем коде с этим селектором ul#nav li:has(ul).Он будет искать все элементы li внутри ul#nav.Если вы хотите просто искать дочерние элементы, вы должны использовать ul#nav > li:has(ul).Попробуйте это

jQuery(document).ready(function(){
   jQuery('ul:first').attr("id", "nav");
   jQuery("ul#nav > li:has(ul)").addClass("hasChildren");    
   if (jQuery('ul#nav li.hasChildren').length)
   {
       jQuery('ul#nav li.hasChildren a').append("<span></span>");
   }
});

Упрощенная версия вашего кода.

jQuery(document).ready(function(){
   jQuery('ul:first').attr("id", "nav");
   jQuery("#nav > li:has(ul) li").append("<a>...<span>..</span> </a>");
   }
});
1 голос
/ 06 сентября 2011

Селектор ul#nav li.hasChildren a выбирает все потомки a элементов.Если вы просто хотите выбрать прямые дочерние элементы, используйте ul#nav li.hasChildren > a.

0 голосов
/ 06 сентября 2011

Попробуйте это:

$("li ul:first").before("<a>Item 1 <span> </span></a>");

Он выберет первые ul в каждом li и добавит этот текст прямо перед ним.

...