我正在遍历一些元素,需要确定一个元素是否有一个带有li标签的子(孙子?),就像下面的信息元素一样。 li元素的id会有所不同,所以我没有这样引用它们。我目前正在循环使用li元素,如果我检查孩子,它总是返回true,因为有一个“a”标签的孩子,我只是想检查'lil'标签的孩子。
<ul id="navMenu">
<li id="home"><a href="#home" rel="ajax">Home</a></li>
<li id="information"><a href="#information" rel="ajax">Information</a>
<ul>
<li><a href="#credits" rel="ajax">Credits</a></li>
<li><a href="#lorem_ipsum" rel="ajax">Lorem Ipsum</a></li>
</ul>
</li>
<li id="contact"><a href="#contact" rel="ajax">Contact</a></li>
</ul>
这就是我现在拥有的......
$('#test').load('../common.html #navMenu', function() {
$.each($("#test #navMenu li"), function(i,v) {
var theElement = $(v);
if ($(theElement).children('li')){
alert('This Element has children');
}
});
});
再次感谢你, 托德
答案 0 :(得分:2)
你可以试试 -
$('#test').load('../common.html #navMenu', function() {
$.each($("#test #navMenu li"), function(i,v) {
var theElement = $(v);
if ($(theElement).find('li').length > 0){
alert('This Element has children');
}
});
});
find
会比children
更深入到当前元素,{{1}}只搜索一个级别。
答案 1 :(得分:1)
$(theElement).children('li')
返回一个jQuery对象,该对象总是传递if
子句,即使它是空的。
此外,您需要.find
,因为.children
仅返回直接子女而不是孙子。
所以:
if ($(theElement).find('li').length > 0) {
或:
if ($(theElement).find('li').length) {
// 0 won't pass an if clause, and all other numbers will, so you can eliminate `> 0`
答案 2 :(得分:1)
假设:
> var theElement = $(v);
> if ($(theElement).children('li')) {
> alert('This Element has children');
> }
没有$(v)
返回一个jQuery对象?所以$(theElement)
是多余的。
无论如何,如果v
是对传递给 .each 的其中一个元素的引用,那么您可以将以上所有内容替换为:
if (v.getElementsByTagName('li').length) {
/* v has li descendants */
]
答案 3 :(得分:0)
您还可以在查询中添加额外的li:“#test #navMenu li li”