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

這將按預期工作。