0

我在 Chrome 扩展程序的开头有这行:

var macroXML = parser.parseFromString(localStorage["myMacro"], "text/xml").getElementsByTagName("section");

做了一些更改后,我尝试更新 macroXML,但没有任何反应。

alert(macroXML[1]);
macroXML[1] = 'RAWR';
alert(macroXML[1]);

没有错误,什么都没有。它输出完全相同的东西。

可能有人知道为什么吗?

4

1 回答 1

0

您正在处理一个动态节点列表。如果文档发生更改,它将更改,例如从列表中删除第二个元素,您可以执行以下操作:

macroXML[1].parentNode.removeChild(macroXML[1]);

或者你用不同的节点替换它:

var newNode = macroXML[1].ownerDocument.createElement("section");
macroXML[1].parentNode.replaceChild(newNode, macroXML[1]);

但是您不能像使用数组那样使用该列表 - 因为您需要一个实际的数组。您可以像这样复制列表:

var macroArray = Array.prototype.slice.apply(macroXML);
macroArray[1] = 'RAWR';

这将按预期工作。

于 2012-08-14T07:10:37.753 回答