确定元素是否具有带X标记的子元素
我正在循环某些元素,并需要确定元素是否具有带li标记的子元素(孙子?),如下面的信息元素中所示。 li元素在id中会有所不同,所以我没有这样引用它们。我目前正在循环阅读li元素,如果我检查孩子,它总是会返回true,因为有“a”标记的孩子,我只想检查'lil'标记的孩子。确定元素是否具有带X标记的子元素
<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');
}
});
});
再次感谢你, 托德
$(theElement).children('li')
返回一个jQuery对象总是通过一个if
条款,即使它是空的。因为.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`
你可以尝试 -
$('#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
当前元素只搜索向下一个级别。
谢谢你完美的作品。我发现了一个新功能,“查找”。 – maddogandnoriko
考虑:
> var theElement = $(v);
> if ($(theElement).children('li')) {
> alert('This Element has children');
> }
不$(v)
返回一个jQuery对象?所以$(theElement)
是多余的。
总之,如果是v
传递给。每元件中的一个的引用,则可以用替换所有上述的:
if (v.getElementsByTagName('li').length) {
/* v has li descendants */
]
谢谢你,你是对的,元素是多余的,我已经删除它。这也很好。我不确定我会使用哪一个,但是如果不是仅仅向他们学习,总能看到其他选择。 – maddogandnoriko
酷尖端约0未通过if子句,似乎后见之明非常明显。 – maddogandnoriko