gpt4 book ai didi

javascript - getElementsByTagName 不返回 javascript 中的注释节点

转载 作者:行者123 更新时间:2023-11-30 07:06:38 28 4
gpt4 key购买 nike

我想检索特定 DIV 元素中存在的所有节点。请参阅下面的测试页(火狐)

 <HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function processTags()
{
var chNodes = document.getElementById('foo').childNodes ;
console.log(chNodes);
console.log("------");

var chNodes = document.getElementById('foo').getElementsByTagName('*') ;
console.log(chNodes);
}
</script>
</HEAD>

<BODY onload="processTags();">
<div id="foo">
<!-- this is a comment -->this is some text ? <span>this is inside span</span>
<div><p>test</p>test<div>
</div>
</BODY>
</HTML>

但它没有给我评论标签..检索所有标签的最佳方法是什么??

最佳答案

问题的核心是这些方法...

document.getElementById(...)
document.getElementsByTagName(...)

... 返回元素,如其名称所示。但是,注释和文本节点不是元素。它们是节点,但不是元素。

所以你需要做一些传统的老式 DOM 脚本,使用像 Vincent Robert 建议的 childNodes。因为 - 正如您在对他的评论中指出的那样 - .childNodes 只深入一层,您需要定义一个递归函数来查找评论节点:(我正在命名我的 document.getCommentNodes())

document.getCommentNodes = function() {
function traverseDom(curr_element) { // this is the recursive function
var comments = new Array();
// base case: node is a comment node
if (curr_element.nodeName == "#comment" || curr_element.nodeType == 8) {
// You need this OR because some browsers won't support either nodType or nodeName... I think...
comments[comments.length] = curr_element;
}
// recursive case: node is not a comment node
else if(curr_element.childNodes.length>0) {
for (var i = 0; i<curr_element.childNodes.length; i++) {
// adventures with recursion!
comments = comments.concat(traverseDom(curr_element.childNodes[i]));
}
}
return comments;
}
return traverseDom(document.getElementsByTagName("html")[0]);
}

关于javascript - getElementsByTagName 不返回 javascript 中的注释节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com