Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery循环遍历HTML的DOM_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery循环遍历HTML的DOM

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() {

我想使用jQuery遍历html页面DOM结构中的所有元素。 基本上只需要body标签中的元素

我之所以要这样做,是因为我想获取每个元素的位置 在身体结构中

我在谷歌上搜索,没有找到我问题的答案

非常感谢你的帮助

$('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(...)