我正在开展一个侧面项目,需要我编写一些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到我想要的.
您可以从节点开始遍历DOM,document并迭代每个节点的childNodes数组.当您找到一个节点时,您可以测试该节点nodeType==8
这是链接
还有一个小例子
<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)
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |