我正在使用聚合物。
我想在模板中有一些内容如下
<ul>
<li>
Home
</li>
<li>
About
</li>
<li>
Actions
<ul>
<li>
Logout
</li>
</ul>
</li>
</ul>
在就绪功能
中var listNodes = this.querySelectorAll('ul > li');
我需要有关此javascript查询选择器的帮助。我应用的当前查询为我提供了该模板中所有 ul 的 li 。但我只想要顶级 ul 的 li 。我不希望所有的孩子 li 的模板。 我认为将其更改为正确的查询,我可能会得到正确的结果。请指导。感谢。
答案 0 :(得分:3)
使用Mohit的评论。能够找到答案。
var listNodes = this.querySelectorAll('ul:scope > li');
答案 1 :(得分:1)
手动解决方案并不是那么糟糕,只需查找第一个列表然后迭代其子元素:
var topList = document.querySelector('ul');
[].forEach.call(topList.children, function(el) {
console.log(el);
});
如果列表具有可识别的父元素(例如正文或具有id的元素),则可以使用直接后代运算符(>
)。
由于您的问题标有jquery,因此这是另一种解决方案:
$('ul:first > li').each(function() {
console.log(this);
});
答案 2 :(得分:0)
将id或某个唯一选择器应用于top元素,如下所示:
<ul id="top">
<li>
Home
</li>
<li>
About
</li>
<li>
Actions
<ul>
<li>
Logout
</li>
</ul>
</li>
</ul>
允许你获得这样的顶级元素:
var topElems = document.querySelectorAll("#top > li");
您可以执行其他唯一选择器,例如body > ul > li
,但您的想法是必须唯一标识要搜索的顶级ul
元素。
修改强>
如果它在聚合物模板中,您可以执行template > ul > li
。
答案 3 :(得分:0)
你必须了解李的一些事情。如果它位于文档的顶层,请使用body > ul > li
console.log(document.querySelectorAll('body > ul > li'))
<ul>
<li>
Home
</li>
<li>
About
</li>
<li>
Actions
<ul>
<li>
Logout
</li>
</ul>
</li>
</ul>
否则,您必须有办法唯一地识别ul
的父级
console.log(document.querySelectorAll('#user-content > ul > li'))
<div id="user-content">
<ul>
<li>
Home
</li>
<li>
About
</li>
<li>
Actions
<ul>
<li>
Logout
</li>
</ul>
</li>
</ul>
</div>
答案 4 :(得分:0)
ul > li
会检查ul
个li
元素作为直接子元素。这就是您获得所有ul
和li
的原因。
如果您想仅限于顶级ul
,li
元素。然后使用ul标签的立即parent
。
document.querySelectorAll('body > ul > li')
假设body
是ul
的直接父母。如果你有一个包装器div /任何其他具有类或ID的元素,也可以使用它来代替body。