2011-12-14 4 views
1

なぜこれは機能しませんか?なぜこのjavascript作業で.cells []が正しく割り当てられないのですか?

var row = document.getElementById(currentRow); 
var otherRow = document.getElementById(targetRow); 
row.cells[0] = otherRow.cells[0]; 

これは

row.cells[0].innerHTML = otherRow.cells[0].innerHTML; 

で動作しますしかし、私はまた、それらを手動で再作成することなく、上に移動したいセルに添付の属性があります。

ソリューション(注:詳細は私の実際の実装で行われているが、これはフレームワークです):

for (var i = 0; i < 4; i++) { 
    var copyTo = row.cells[i]; 
    var copyFrom = otherRow.cells[i].cloneNode(true); 
    copyTo.parentNode.replaceChild(copyFrom, copyTo); 
} 
+1

「HTMLCollection、** readonly **、DOM Level 2で修正されたセル」(http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-67349879経由) ) –

答えて

2

あなたが実際にノードとその属性のクローンを作成するためにcloneNode()を使用することができるはずです。

+0

row.cells [0] = otherRow.cells [0] .cloneNode(true);動作しません。 –

+0

そこではうまくいかなかったことをもっと明示できるでしょうか? –

+0

新しいノードをrow.cells [0]に割り当てません。 row.cells [0]で.innerHTMLを使用して、何が渡されたかを確認しようとすると、DOMElementは渡されましたが、row.cells [0]はそれを割り当てとして受け入れません。 –

2

cellsの各エントリは、DOMElementを参照します。 row.cells[0] = otherRow.cells[0]と入力したときは、row.cell[0]には、同じDOMElementをotherRow.cells[0]として参照させます。

otherRow.cells[0];と同じテキストまたはHTMLを使用したい場合は、参照するDOMElementを変更するだけでなく、実際にDOMElementを変更しているため、2番目のコードスニペットでも同じことが行われます。 。

+0

ポインタについての点をありがとうございます。 –

+0

要素の属性またはその子要素の属性 – Ivan

+0

DOMElementのディープコピーを作成するにはどうすればよいですか? –

関連する問題