2011-12-06 19 views
1

私は入力フィールドを持つ新しい行を追加できるテーブルを持っています。また、追加された入力フィールドを削除する可能性もあります。完全な行を削除すると機能しますが、セル内の1つの入力フィールドを削除すると問題が発生します。Javascript - removeChildはテーブルのセル全体を削除します

cell1=document.getElementById('avz_tabelle').rows[par.rowIndex].cells; 

var feld = document.createElement("input"); 
feld.setAttribute("name","avz_keywords" + avz_array + "[]"); 
feld.setAttribute("onblur",""); 
feld.setAttribute("type","text"); 
feld.setAttribute("size","30"); 
cell1[1].appendChild(feld); 

var remove = document.createElement("a"); 
remove.setAttribute("href","#"); 
remove.setAttribute("onclick","this.parentNode.parentNode.removeChild(this.parentNode);"); 
remove.innerHTML = " X"; 
cell1[1].appendChild(remove); 
var br = document.createElement("br"); 
cell1[1].appendChild(br); 

問題ではなく、関連する入力フィールドの、削除アクションがcompletlyセル全体を削除していることである: ここではコードです。奇妙なことは、これは問題なくテーブルの最初の層で動作することです。 エラーが表示されますか?何か提案ありがとう!

答えて

1

いいえ、アンカー要素removecell1[1](インデックスpar.rowIndexの行の単一の表セル)を追加しています。したがって、アンカー要素へのparentNodeはセルです。 this.parentNode.parentNode.removeChild(this.parentNode)を使用すると、アンカーのparentNode(セル)が削除されます。

EDIT:this.previousSiblingはinput要素

+0

いいえ、それは心配しないでください:-) はいthis.previousSiblingのソリューションは機能しますが、 "X"ボタンは削除されません。しかし、ありがとう、この答えは私にさらに一歩をもたらします。 – Crayl

1

あるかもしれないので、あなたので

this.previousSibling.parentNode.removeChild(this.previousSibling); 

:解決策:攻撃...申し訳ありません:-)

EDIT2であったかもしれない文を削除DOMを使用してHTMLを作成する場合、イベントの属性を設定する必要はありません。

remove.setAttribute("onclick"... bを置き換えますYのようなもの:

remove.onclick = function(ev){ 
    feld.parentNode.removeChild(feld); 
} 

feldonclick機能は同じスコープで定義されている、あなたはここで閉鎖を持っています。機能内でfeldを使用できるようにします。

+0

これはセクシーな解決策です、ありがとうございます! remove.innerHTML = ""を追加すると、それは機能に完全に動作します。ウーホー。 – Crayl

+0

@Crayl、それはセクシーではない、それはきれいな短いコードを取得する方法です。 – Mic

関連する問題