Подтвердить что ты не робот

Можем ли мы напрямую удалить узлы из NodeList?

document.getElementsByTagName возвратил мне объект NodeList.

Я хотел бы удалить некоторые элементы (скажем, я хотел бы удалить первый элемент из NodeList)

Есть ли способ сделать это? (Я знаю, что я мог бы вручную скопировать все узлы в массив, но я не хочу этого делать, если сам NodeList уже имеет функции для удаления элементов в нем)

Я знаю, что удаление элементов из NodeList не имеет эффекта на дисплее (и не должно вызывать обновления браузера или обновления такого типа, я просто не хочу, чтобы объект NodeList удерживал ссылку на этот Node)

Есть ли способ сделать это? (Или я вынужден скопировать все элементы в NodeList в массив?)

4b9b3361

Ответ 1

Как вы можете видеть в спецификации, нет способа удалить элемент из списка.

В любом случае это не имеет смысла. Это NodeList в режиме реального времени, что означает, что DOM выполняется поиск снова, когда вы обращаетесь к определенному свойству, например. length. Из MDC:

(...) Возвращаемый список lis live, что означает, что он автоматически обновляется с помощью дерева DOM. (...)

Итак, вам нужно скопировать узлы в массив.

Вы можете сделать это довольно легко, используя методы Array. Например. скопировать его и удалить первый элемент:

var nodes = [].slice.call(elements, 1); 

NodeList - объект, подобный массиву. Следовательно, мы можем применить к нему функции массива, используя call [docs]. [].slice является просто сокращением, чтобы получить ссылку на метод slice [docs].