3

我正在使用 addon-sdk-1.14 为 firefox 24.0 开发插件,并且在复制 Node 对象的 parentNode 时发现了一些奇怪的行为。

完整内容脚本文件:

var imgs = document.getElementsByTagName("img");                             
if (imgs.length > 0) {                                                      
    var node = imgs.item(0);                                                
    var parent = node.parentNode.cloneNode();                               
    if (parent && node.parentNode) {                                        
        console.log(node.parentNode.nodeType);                              
        console.log(parent.nodeType);                                       
    }                                                                       
} 

输出:

1
null

我不熟悉javascript,我想了解发生了什么?我们是否不允许复制 Node 对象,或者什么?

4

2 回答 2

2

要么将parent变量的名称更改为不那么突兀的名称,要么将您的代码放在一个自执行的匿名函数中(我建议使用前者)。

于 2013-09-22T14:30:38.647 回答
0

尝试node.parentNode.nodeName,您可能正在引用 atextNode或其他无法意外使用的内容。

您还可以通过以下方式循环浏览可用的方法和属性...

for (i in node.parentNode) {alert('i = '+i);}

发表评论,我会跟着你,直到你到达你需要的地方。

请记住,如果您有id属性,它们可能会重复......

警告:cloneNode() 可能会导致文档中的元素 ID 重复

https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode#Notes

...当您使用 JavaScript 来引用 anid时,它会导致不可预知的行为。

于 2013-09-22T11:06:04.260 回答