2

JavaScript を使用して、ページからボタンまたは入力タグを含むすべてを削除しようとしています...これまでのところ、私のコードはそれらの一部を削除していますが、その理由はわかりません。多くのチェックボックスのうち1つと2つのボタン(3つのボタンがあります)のみを削除します

var buttons = document.getElementsByTagName("button");
for (var j = 0; j < buttons.length ; j++)
{
    buttons[j].parentNode.removeChild(buttons[j]);
}

var checkboxes = document.getElementsByTagName("input");
for (var j = 0; j < buttons.length ; j++)
{
    checkboxes[j].parentNode.removeChild(checkboxes[j]);
}
4

2 に答える 2

2
var checkboxes = document.getElementsByTagName("input");
for (var j = 0; j < buttons.length ; j++) // You use the wrong variable here
{
    checkboxes[j].parentNode.removeChild(checkboxes[j]);
}

あるべきです;

for (var j = 0; j < checkboxes.length ; j++) 

削除されていないボタンについてinput type="button"は、 ? ではなく<button>?であることが原因かもしれません。

document.getElementsByTagName("input");チェックボックスだけでなく、後ですべての入力を取得して削除することに注意してください。


jQuery のような JavaScript ライブラリを使用することをお勧めしますか? これを 1 行のコードで問題なく実行できたはずです。

$('input[type="button"], input[type="checkbox"], button').remove();
于 2012-06-04T23:26:54.557 に答える
1

document.getElementsByTagNameライブ NodeListを返します。つまり、最初の要素を削除すると、a)長さが短くなり、b)リストの(最初の)項目がシフトします。

これを回避するには、次の2つの可能性があります。

  • 常に最後の要素を削除してください。NodeListはドキュメント順になっているため、次のように機能します。

    for (var i=buttons.length-1; i>=0; i--) // var i=buttons.length; while(i--)
        buttons[i].parentNode.removeChild(buttons[i]);
    
  • length常に最初の要素を削除し、 :までインデックスを実行しないでください。

    while (buttons.length) // > 0
        buttons[0].parentNode.removeChild(buttons[0]);
    

また、NodeListアイテムを静的配列にコピーするため、jQueryとcoでも機能します。あなたもそれを自分で行うことができます:

var staticButtons = Array.prototype.slice.call(buttons);
for (var i=0; i<staticButtons.length; i++)
    staticButtons[i].parentNode.removeChild(staticButtons[i]);

または、次のように、静的NodeListをすぐに返すドキュメント選択メソッドを使用しますquerySelector

var staticList = document.querySelectorAll("button, input");
于 2012-06-05T00:09:01.073 に答える