Javascript 使用jQuery循环遍历HTML的DOM
我想使用jQuery遍历html页面DOM结构中的所有元素。 基本上只需要body标签中的元素 我之所以要这样做,是因为我想获取每个元素的位置 在身体结构中 我在谷歌上搜索,没有找到我问题的答案 非常感谢你的帮助Javascript 使用jQuery循环遍历HTML的DOM,javascript,jquery,Javascript,Jquery,我想使用jQuery遍历html页面DOM结构中的所有元素。 基本上只需要body标签中的元素 我之所以要这样做,是因为我想获取每个元素的位置 在身体结构中 我在谷歌上搜索,没有找到我问题的答案 非常感谢你的帮助 $('body *').each(function() { // do stuff }); 如果您有内联标记等,则可以添加:not选择器以排除这些标记: $('body *:not(script, style, noscript)').each(function() {
$('body *').each(function() {
// do stuff
});
如果您有内联
标记等,则可以添加:not
选择器以排除这些标记:
$('body *:not(script, style, noscript)').each(function() {
// do stuff
});
正如评论和jQuery文档中指出的,这可能不会很好地执行。我没有做过任何实证测试,但这可能表现得更好:
$('body').find('*').not('script, style, noscript').each(...);
最好的解决方案可能是使用
getElementsByTagName
而不是jQuery选择器:
$(document.body.getElementsByTagName("*")).each(function () {
// Do something here
});
将选择器中的*
与任何内容结合起来通常不是一个好主意,正如jQuery文档本身所指出的:
警告:除单独使用外,all或universal选择器速度极慢
如果您真的愿意,您可以使用这些变体中的任何一种,尽管它们都不能提供比getElementsByTagName
更好的性能:
$(document.body).find("*");
$("body").find("*");
$("*", document.body);
使用:
这两个选择器在旧浏览器(如IE7和更低版本)中的性能都很差。对于后一个选择器,最好在
每个
回调函数中执行一次检查。如果我这样做,并且在//do stuff部分中,我将alert($(this).name)作为答案,但没有定义。它似乎覆盖了我身体的所有元素。我只需要弄清楚如何访问它们correctly@Punxdelirium在函数中,this
指向DOM元素,因此可以执行this.name
。用$(this)
将其包装成一个没有名称
属性的jQuery对象。@Punxdelirium:您应该使用这个.tagName
来获取标记名this.name
将指向存在于某些元素(如
和
)上的name
属性,但它并不适用于所有元素。
$("body *").each(...)