我知道如何使用JQuery迭代xml元素的子元素:
$(this).children('tag_name').each(function() {
});
如果元素有子节点,是否有一种方便的方法来简单地测试?像这个错误的代码:
$(this).hasChildren('tag_name') //returns true or false
答案 0 :(得分:6)
使用此方法:
var hasChildren = $(this).children('tag_name').length > 0;
答案 1 :(得分:1)
$(this).find('tag_name').length > 0
在所有后代之间进行搜索
对于直系孩子来说$(this).children('tag_name').length > 0
答案 2 :(得分:0)
你可以做 -
if ( $(this).children('tag_name').size() > 0 )
{
// do something
}
答案 3 :(得分:0)
是否有方便的方法来简单地测试一个元素是否有孩子?
如果没有设置特定的元素名称,这是最直接的方式。
this.childElementCount > 0
答案 4 :(得分:0)
对于那些重视效率的人(应该是我们所有人):
如果您需要做的就是找出您的节点是否有任何子节点(不考虑类型),那么您要做的就是检查
if(this.childElementCount)
类似于Allain Pannetier suggested。这是纯JavaScript,即使在使用jQuery的情况下,也可以并且应该用于此类情况。 (请注意,$()
周围没有this
)
对于需要查看是否存在某些类型的DIRECT或INDIRECT子级的情况,您要做的就是找到至少一个,这种情况下最快,最有效的jQuery方式是:
$('tag:first-of-type', $(this)).length
基本上在$(this)上下文中找到任何第一个tag
。 (如果嵌套,则可以返回多个,但速度更快)
对于只需要查找类型直接子代的情况,可以使用:$(this).children('tag:first-of-type').length
以上所有示例将返回0,即false或非零,即true,因此您可以将它们用作true / false语句,而无需与0或> 0
进行比较。
甚至更快:如果您的this
节点具有唯一ID(或其他标识符,请相应调整),则提供纯CSS选择器以使用优化的本机搜索,例如:
$( '#'+this.id+' > tag:first-of-type' ).length
仅适用于后代
$( '#'+this.id+' tag:first-of-type' ).length
(直接/间接)
如果可以避免的话,请勿执行$(this).children('tag').length
或$(this).find('tag').length
之类的操作
在适当的地方使用:first-of-type
这样做的原因是jQuery创建children()
集合的开销,在该集合中,每个子对象都将作为其自己的jQuery对象呈现。如果父节点中有很多子节点,那么这将是巨大且不必要的开销。您所做的所有工作仅是为了计算该集合中有多少成员。然后它将一直驻留在内存中,直到收集垃圾为止。通常,您不必担心内存(尽管应该在繁忙的应用程序中),但是要避免为生成的jQuery对象创建子对象的过程是您要避免的开销。仅当您打算使用该集合的子代时才这样做,这意味着-将其分配给要重用的变量。
node.hasChildNodes()
具有完整的浏览器支持,但是如果存在空格或文本,则失败,因此此处不建议这样做。
node.childElementCount
拥有全面的支持,除了边缘情况外,这几乎是您不必担心的事情,但是请参阅caniuse