Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/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
Javascript jquery在分层菜单中选择li元素_Javascript_Jquery - Fatal编程技术网

Javascript jquery在分层菜单中选择li元素

Javascript jquery在分层菜单中选择li元素,javascript,jquery,Javascript,Jquery,我需要能够从特定的li中获取文本,单击时,代码如下: <div> <ul> <li>list item 1</li> <li>list item 2</li> <li> <ul> <li>list item 3</li> <li>list item 4</li> <li&

我需要能够从特定的
li
中获取文本,单击时,代码如下:

<div>
<ul>
    <li>list item 1</li>
    <li>list item 2</li>
    <li>
      <ul>
       <li>list item 3</li>
       <li>list item 4</li>
       <li>list item 5</li>
     </ul>
    </li>
    <li>list item 6</li>
    <li>
       <ul>
       <li>list item 7</li>
       <li>list item 8</li>
       <li>list item 9t</li>
     </ul>
    </li>
  </ul>
</div>

  • 清单项目1
  • 清单项目2
    • 清单项目3
    • 清单项目4
    • 清单项目5
  • 清单项目6
    • 清单项目7
    • 清单项目8
    • 清单项目9t
在本例中,我需要通过索引获取“列表项5”

编辑:

基本上,当单击列表项5时,我想得到这个特殊的文本或值,当单击其他内容时,什么也不做。请注意,尽管菜单是分层的,但第5个元素表示平坦的第5个元素。仔细检查
li
项目的文本,以便理解

$('li').on('click',function(){
    alert($(this).text());
});

好吧,
eq
选择器对于您的目的来说已经足够了

$("li:eq(5)").click(function(){
  var text = $(this).text();
})

您最好的解决方案是为该项提供一个id或至少一个类,然后您可以执行以下操作:

$("#myID").click(function() {
    var text=$(this).text();
});
如果无法执行此操作,则可以尝试使用各种导航选择器,例如(未测试):

但这是一种非常尴尬的方式,可能会在您向列表中添加更多项目时中断。(这里有一个-只有在单击列表项5时才会发出警报)

或者,如果文本是静态的,您可以通过以下方式进行选择:

$("li:contains('list item 5')").click(...

如果该文本发生变化,或者如果有其他节点包含相同的文本,该节点将再次中断。

您不能给它指定特定的类或id吗?欢迎Marcel-Stackoverflow尝试收集并回答常见问题。没有添加任何类或id…基于.eq()或索引的内容?@Marcel:您的意思是,尽管列表具有层次结构,为此,您希望将其视为平面吗?我想用一行代码就很难了。嗯……是的,但这适用于每三个元素,所以如果你有9个主要的ul,它们将应用于第三、第六、第九个元素,这是我不想要的。文本应该是动态的:(@Marcel:不会。它只适用于第三个元素-你想的是
:n个孩子(3n)
。但是使用直系后代选择器(
)可能会更好。太棒了,谢谢。这对旧的IE版本合适吗?我知道他们有时不喜欢(>) selectors@Marcel:IE应该没问题。如果浏览器不支持某些功能,JQuery将进行必要的更改。这不仅不能满足OP的要求(尽管问题还很不清楚),它让点击冒泡,这样当你点击嵌套的
li
@MattBurland I更新了jsfiddle以停止冒泡时,你会收到多个警报。OP编辑了问题,所以现在这个答案对于OP想要的不再准确(此时,因为OP可能会再次编辑他的问题&再次&再次…)
$("div>ul>li:nth-child(3)>ul>li:nth-child(3)").click(...
$("li:contains('list item 5')").click(...