05 июн. 2012 г., 01:36 от gdorongrizzly_beer

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

Я пытаюсь использовать 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]);
}

Ответы на вопрос (0)

05 июн. 2012 г., 01:32 от gdoron
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();
03 июл. 2013 г., 16:08 от Bergi

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

ВАШ ОТВЕТ НА ВОПРОС