0

我有这条线在Chrome扩展的开始:不能更改JS变量的值,使用parseFromString

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

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

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

没有错误,没有任何东西。它输出完全相同的东西。

有人可能知道为什么吗?

+0

看起来像一个NodeList。 – SLaks 2012-08-13 19:25:47

+0

这是一个XMLDocument。它可以不被改变或什么? :/ – vox 2012-08-13 19:47:59

+0

我怀疑没有。将它复制到一个数组 – SLaks 2012-08-13 21:06:21

回答

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'; 

这将按预期工作。