2008-11-07 23 views
4

我在使用XSL模板作爲div元素的innerHTML的內容使用的XML DOM對象中構建HTML代碼。傳統上,我們創建一個新的XML DOM文檔,並通過javascript爲XML轉換添加輸入參數。這非常耗時,因爲我們基本上是從另一個表示我們當前帳戶的XML文檔中挑選數據並將數據複製到臨時XML DOM文檔中。element.cloneNode(true)(深度克隆)的效率如何?

我想要做的是克隆賬戶文檔的相關節點(即客戶信息)並將其用作轉換的基礎。我不想直接使用帳戶文檔,因爲我希望能夠添加變換特定的輸入,而不更改帳戶對象。

使用.cloneNode(true)對於大約2000個元素的文檔中通常少於200個元素的所需節點的效率如何?目標平臺是IE6,沒有外部工具(即ActiveX)。

+2

這個問題需要編輯,使其更清楚你正在討論XML DOM cloneNode而不是HTML DOM cloneNode,它在IE上完全是不同的代碼庫。 – AnthonyWJones 2008-11-08 10:48:03

回答

3

CloneNode是相當有效,但它的Wi這樣做會消耗更多的內存。

另一種考慮的方法是使用Template對象和處理器,將額外/更改的數據作爲參數傳遞給處理器,以及將作爲輸入元素克隆的元素。儘管這種方法需要相當重要的模塊XSL。

2

IE會在某些事情上失敗。

例如當您將副本添加到DOM時,選中的收音機/複選框將不會被檢查。

例子:

http://webbugtrack.blogspot.com/2008/03/bug-199-cant-clone-form-element-in-ie.html

http://webbugtrack.blogspot.com/2007/08/bug-242-setattribute-doesnt-always-work.html

要查看IE實際上將返回,嘗試在您的網頁之一的地址欄與此替換URL,然後按回車。

javascript:'<xmp>'+window.document.body.outerHTML+'</xmp>'; 

如果您對結果感到滿意,偉大的!但我想你會最終小於在什麼IE返回(無論是在DOM,而這個「字符串」值equivelant。

+0

據我瞭解這個問題,並不是複選框不會被檢查。 IE複製複選框和其他標籤的初始狀態 – 2011-01-11 17:25:04

+0

我認爲最大的訣竅是當你複製一個具有`name`的表單域(99%將)時,你只能*「種類」*重命名它。例如它將使用新名稱提交,但是從DOM 0`myForm.elements [newName]`訪問它將失敗。不幸的是,在IE中克隆只有1個問題。 – scunliffe 2011-01-11 19:22:47

0
滿意

如果你不需要形式元素,cloneNode是一個真正可靠的工具...

- 在將Ajax的數據是效率驚人...

然而,由於特別是IE瀏覽器在名稱屬性方面存在問題的歷史,因此解決任何問題是不方便的如果你插入數據...

- 我真的不明白你的XSL(T) - 使用,對我來說,聽起來像使用加油站作爲(不!)方便的地方來改變1960年西弗吉尼亞州2008年的斯柯達...

Userely他們有一些共同的技術,但它不以同樣的方式使用,電腦在某種程度上只是一個小問題,主要的問題是近任何其他方法O]

你有任何需要形式的元素 - !?)