如何获取javascript中注释元素的句柄?

cha*_*sie 1 javascript

我正在开展一个侧面项目,需要我编写一些javascript代码.不幸的是,我对javascript世界很新,我正在学习.

因此,我必须做的部分工作要求我在页面上找到某些评论,并且我使用以下行来获取所有评论:

var arr = document.getElementsByTagName("!");
Run Code Online (Sandbox Code Playgroud)

这在IE8中完美运行,并返回页面上所有注释的数组.然而,这会在Google Chrome中返回一个空数组,TypeError当我打开开发者控制台时,我可以看到未被捕获(可能是由于在空数组上执行了操作).

任何想法为什么这不适用于两种浏览器?这是我不应该使用的某种不受支持的操作,还是我只是滥用它?

非常感谢任何帮助,或指向某个方向的指针!谢谢!

澄清:我这样做是为了操纵sharepoint页面.这个脚本的实际意图是隐藏输入元素所在的表行.所以要做到这一点我需要先找到元素,但我不能这样做,因为它的属性基本上是乱码垃圾:

<input name="ctl00$m$g_edc51673_bad2_46d5_9a65_e71137e56558$ctl00$ctl04$ctl00$ctl00$ctl??00$ctl04$ctl00$ctl00$TextField"
type="text" value="Title" maxlength="255"
id="ctl00_m_g_edc51673_bad2_46d5_9a65_e71137e56558_ctl00_ctl04_ctl00_ctl00_ctl00_??ctl04_ctl00_ctl00_TextField"
title="Title" class="ms-long">
Run Code Online (Sandbox Code Playgroud)

(我在某些地方添加换行符以便于阅读,但这一切都在源代码中的一行(不是那会有所不同))

所以无论如何,我无法真正使用那个找到我正在寻找的控件.你可能会说,它有一些结构,它与垃圾结尾处的输入类型一致,而title属性和所有这些结构.但事实并非如此.你真的,微软,这是为了一些控制,但不是为其他人.

但!它们与在这个带有元素名称的乱码垃圾之前提供评论完全一致,如果我能抓住那个评论,我可以foo.parenNode到我想要的.

mrk*_*mrk 5

您可以从节点开始遍历DOM,document并迭代每个节点的childNodes数组.当您找到一个节点时,您可以测试该节点nodeType==8

这是链接

的childNodes

节点类型

document.createTextNode

还有一个小例子

<html>
<head>
</head>
<body>
<ul>
<li>junk
<li>text
<!-- comment 1 -->
<li>hi
<li>hello
<li>world
</ul>
<br/>
<!-- comment 2 -->
<script>
window.onload=findcommentsstart
var msgs = [];
function findcommentsstart()
{
    findcomments(document);
    var txt = document.createTextNode(msgs.join("\n"));
    document.getElementsByTagName("body")[0].appendChild(txt);
}

function findcomments(d)
{
    if(!d)
        return;
    if(d.nodeType==8)
        msgs.push("found a comment node " + d.data);
    if(!d.childNodes)
        return;
    for(var i=0;i<d.childNodes.length;i++)
        findcomments(d.childNodes[i]);
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)