以下のスクリプトでRemoveTextBoxが動きません。

どうしたらいいのでしょうか?

後、このソースはIEで動きますか?
FireFoxではAddTextBoxの動作は確認しています。

<script language="JavaScript" type="text/javascript">
<!--
var IDNumber = 0; // text boxのID用

function AddTextBox(id) {
var obj = document.getElementById(id);
obj.innerHTML += "<input type=text name="+ id + IDNumber + "><input type=radio name=caller"+ id + IDNumber +">テスト完了<input type=radio name=ok"+ id + IDNumber +">日本語完了<br>";
IDNumber++;
}

function RemoveTextBox(id) {
var obj = document.getElementById(id);
obj.innerHTML = obj.innerHTML.replace(/<input((?:(?!type="text").)*?)type="text"[^>]*>テスト完了<input((?:(?!type="radio").)*?)type="text"[^>]*>日本語完了<input((?:(?!type="radio").)*?)type="text"[^>]*><br>/i, "");
}
// -->
</script>
<body>
<table border="1">
<tr>
<td>テスト項目</td>
<td><input type=button value=" add " onClick="AddTextBox('test')"></td>
<td id ="test9_a"><input type=button value=" del " onClick="RemoveTextBox('test')"></td>
<td id ="test"></td>
</tr>
</table>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/06/21 12:12:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:Kenju No.1

回答回数30ベストアンサー獲得回数2

ポイント60pt
function RemoveTextBox(id) {
  var obj = document.getElementById(id);
  for(var ix = 0; ix < 6; ix++)
    obj.firstChild.removeNode(true);
}

innerHTMLはお勧めできませんが、とりあえずこれで。

ただこれだと追加する要素の数が変わったときに問題があるので追加時にdiv要素などでくくって、最初に見つかったdiv要素を子要素ごと削除するようにするといいと思います。

IE6で確認済み。

id:hopefully

ひとつずつ消したい場合はどうしたらいいでしょうか?

2007/06/19 15:59:18
  • id:Kenju
    失礼、firefoxはremoveNodeに対応してないようでした。
    以下におきかえてください。
    >|
    function RemoveTextBox(id) {
    var obj = document.getElementById(id);
    if(obj.hasChildNodes()) {
    for(var ix = 0; ix < 6; ix++)
    obj.removeChild(obj.firstChild);
    }
    }
    |<

    で、ひとつずつ・・・というか、ひとかたまりずつ消えるようになってると思いますが、具体的にはどういうふうに消えればいいのでしょうか。
  • id:hopefully
    AddTextBox(id)を二回実行したら
    テキストボックスは二個出来ると思うのですが
    その際にこのfunction RemoveTextBox(id)を実行した時に
    一個だけテキストボックスを消したいんです。
  • id:Kenju
    こちらでテストした結果ではそのようになりましたが、なりませんか。
    ならないんだと、私にはお手上げです。

    AddTextBox関数から作ればできるけど。。。
  • id:hopefully
    了解ですw
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません