Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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
Jquery 如何在递归菜单中仅选择顶级li?_Jquery_Html_Css_Dom - Fatal编程技术网

Jquery 如何在递归菜单中仅选择顶级li?

Jquery 如何在递归菜单中仅选择顶级li?,jquery,html,css,dom,Jquery,Html,Css,Dom,如何仅选择第一级李?如果我做‘ulli’,它也会选择孩子。有没有办法使用CSS只选择顶层而不选择子级?如果不是,我可以使用jQuery,但是在这种情况下我又如何选择它呢 <ul> <li class="administration first"> <a href="/administration.aspx"><span>Administration</span></a> <ul&

如何仅选择第一级李?如果我做‘ulli’,它也会选择孩子。有没有办法使用CSS只选择顶层而不选择子级?如果不是,我可以使用jQuery,但是在这种情况下我又如何选择它呢

<ul>
    <li class="administration first">
        <a href="/administration.aspx"><span>Administration</span></a>
        <ul>
            <li class="users first selected"><a href="/administration/users.aspx"><span>Users</span></a></li>
            <li class="forms last"><a href="/administration/forms.aspx"><span>Forms</span></a></li>
        </ul>
        <div style="clear: both;"></div>
    </li>
    <li class="analytics"><a href="/analytics.aspx"><span>Analytics</span></a></li>
    <li class="options"><a href="/options.aspx"><span>Options</span></a></li>
    <li class="system last"><a href="/system.aspx"><span>System</span></a></li>
</ul>

如果您的ul有一个类或ID,您可以这样做:

$('#myList > li')

的jQuery选择器语法为:

子组合子(E>F)可以被认为是后代组合子(ef)更具体的形式,因为它只选择第一级后代


根据您拥有的结构,您可能还需要指定
ul
父元素。

您需要位于第一个ul之上的元素或类,然后指定
{parent selector}>ul>li

快速修复,如果可能,可以在外部ul上添加一个类名并使用
$('ul.myClassName>li'))

另一个选项:
$('ul>li:has(ul)
它将提供除最后一个嵌套级别之外的所有嵌套级别

$(".analytics:parent > li")
将适用于此特定情况,但最好给顶层一个类或id

比如:

$("#top-level-ul > li")
似乎比必须选择一个
li
s的父项更容易理解('ul-li:first')

$('ul-li:first>li”)。

如何
$('ul-li')。而不是('ul-ul-li')

如果需要,您可以进一步排除
ul-ol-li
ol-ul-li
,您可以使用:

$('ul li:not(ul li ul li)')

这将仅选择顶层,但您还需要在第一个ul上使用某种id或类选择器,否则它可能会干扰页面内容等

  // Add a class to the first UL element      
  $(".wrapper > ul").addClass("first-level");

  // Target the first classes first li child
  $(".wrapper ul.first-level > li:first-child");

ie8和更低版本中存在一些问题。

使用JQuery遍历通常性能更好:

鉴于这是页面上的第一个UL:

$("ul").first().children();
假定父元素具有ID:

$("#TagID").find("ul").first().children();
$("#MyID").children();
鉴于UL有一个等级:

$("ul.myClass").children();
如果UL有一个ID:

$("#TagID").find("ul").first().children();
$("#MyID").children();
给出第一个LI具有特定类的示例:

$("li.administration").parent().children();

$('ul>li')
$('ul li')
几乎相同,因为li标记总是在ul标记之后。两人都没有回答他的问题。在上面的列表中,你想要什么样的风格?这两个li:
  • 或者仅仅是第一个?@Hardware-OP想要第一级
  • 元素,这意味着最外层
      的所有直系子女。下层选民应该体面,并给出理由。从“如果你看到错误的信息,就否决它。添加评论,指出什么是错误的。”投票回到零,为什么这个-1?@patrick-同意。如果我错了,我很想知道为什么,这样下次我必须回答一个问题时我才能是对的@迪伯斯特-谢谢你投票支持我。我很感激。投票可能来自您(简短的)原始答案
      $('ul li')
      ,但应该给出解释,并且在答案确定后应该删除。这将选择列表中的第一个li标记,而不是嵌套li的顶层。也许是对这个问题的误解?我的代码将返回ul的每个第一个孩子li,这不是他要求的吗?我没有否决你的投票,但OP想要所有孩子
    • 元素,只有最外层的
        。这就是第一级的意思o) 我喜欢这个,因为它根本不需要我改变ul菜单,比如给它添加一个类。这个菜单是自动生成的,所以我没有太多的控制权。因此,用一个类将其包装为div非常有效。谢谢这是一个很好的解决方案,但是您也必须考虑页面中的其他无序列表。但是,应该为给定的标记工作,非常有创意。有人正在获得否决票(也请参见我的回答)+1支持你,因为我不喜欢无缘无故的否决票。我没有否决你,但这会给你每个
          元素的子元素,包括嵌套元素。您需要添加一个说明符,以仅指示最外层的
          。将提醒
          6
          而不是
          4
          ,表示所有
        • 元素都已被选中。