Вопрос по javascript – JavaScript пытается удалить все вещи с определенными тегами

2

Я пытаюсь использовать JavaScript, чтобы удалить все, что связано с кнопками или тегами ввода со страницы ... Пока мой код удаляет некоторые из них, и я не знаю, почему. Он удаляет только один флажок из многих и 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]);
}

Ваш Ответ

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"); позже получит и удалит все входные данные, а не только флажки!


Могу ли я предложить вам использовать библиотеку javascript, такую как jQuery? Вы могли бы сделать это с одной строкой кода без проблем:

$('input[type="button"], input[type="checkbox"], button').remove();
@grizzly_beer. Конечно, это так, но у вас могут быть другие проблемы за пределами кода, который вы вставили здесь. Попробуйте jQuery, это может спасти вас от неприятностей, особенно если вы не ниндзя javascript.
Aaaah !!! вот во второй раз я сегодня что-то выложил здесь, потому что я неправильно написал длину !!!! Я должен быть уставшим. Спасибо!! grizzly_beer
Ой, подождите, это не так ... Я устал ...: / grizzly_beer
@grizzly_beer. ЛОЛ. Просто обратите внимание и на другие вопросы ... Удачи!
1

document.getElementsByTagName возвращаетlive NodeList, Это означает, что когда вы удаляете первый элемент, а) длина уменьшается и б) (первый) элемент списка смещается.

Есть две возможности обойти это:

  • always remove the last element. The NodeList is in document order, so that will work:

    for (var i=buttons.length-1; i>=0; i--) // var i=buttons.length; while(i--)
        buttons[i].parentNode.removeChild(buttons[i]);
    
  • always remove the first element, and don't run an index until the length:

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

Это также будет работать с jQuery и co, потому что они копируют элементы NodeList в статический массив. Вы можете сделать это и сами:

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");

Похожие вопросы