При удалении элемента со стандартным JavaScript вы должны сначала перейти к его родителю:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Необходимость сначала перейти к родительскому узлу кажется мне немного странной, есть ли причина, по которой JavaScript работает следующим образом?
javascript
Zaz
источник
источник
element.remove()
непосредственно с ES5. Вам не нужен родитель!Ответы:
Я знаю, что расширение встроенных функций DOM не всегда является лучшим или наиболее популярным решением, но оно прекрасно работает для современных браузеров.
И тогда вы можете удалить элементы, как это
или
Примечание: это решение не работает для IE 7 и ниже. Для получения дополнительной информации о расширении DOM прочитайте эту статью .
РЕДАКТИРОВАТЬ : рассмотрение моего ответа в 2019 году,
node.remove()
пришло на помощь и может быть использовано следующим образом (без polyfill выше):или
Эти функции доступны во всех современных браузерах (кроме IE). Читайте больше на MDN .
источник
NodeList
илиHTMLCollection
которые являются массивом как набор элементов. Второе определение метода позволяет удалить эти «наборы элементов».document.getElementsByClassName("my-elements").remove();
. Изменить: на самом деле он удаляет кучу, но требует повторного запуска, чтобы закончить. Попробуйте это на этой странице с классом "комментарий-копия".Crossbrowser и IE> = 11:
источник
$.ready
альтернативуnoscript
тегам, превышающим js . Чтобы использовать его так, как я хотел, я должен был обернуть его в функцию 1 мсsetTimeout
. Это решает все мои проблемы одновременно. Gracias.outerHTML
, все еще является новым дополнением к стандарту. Если вы ищете поддержку для любого программного обеспечения> 6 на момент написания, вам понадобится другое решение.remove
Функция уже отмечались другими является подобным случаем. Как обычно, реализовать полифилл безопасно.delete element
ничего не делает, так как вы не можете удалить переменные в JS, только ключи;) Убедитесь, что он не работаетconsole.log(element)
послеdelete element
...removeChild
(около 6-7% в моей системе). См. Jsperf.com/clear-outerhtml-v-removechild/2Вы можете создать
remove
функцию, чтобы вам не приходилось каждый раз думать об этом:источник
elem
наremove.elem
. Таким образом, функция ссылается на себя, поэтому вам не нужно создавать другую глобальную переменную. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Это то, что поддерживает DOM . Поищите на этой странице слова «удалить» или «удалить», и единственное, что удаляет узел, - removeChild .
источник
element.remove();
будет работать. Может быть, это что-то новое. Но впервые у меня так и работает. Я думаю, что это должно было работать всегда, потому что это очень важно.DOM организован в виде дерева узлов, где каждый узел имеет значение, а также список ссылок на его дочерние узлы. Таким образом,
element.parentNode.removeChild(element)
имитирует именно то, что происходит внутри: сначала вы переходите на родительский узел, затем удаляете ссылку на дочерний узел.По DOM4, функция помощника предоставляется делать то же самое:
element.remove()
. Это работает в 87% браузеров (по состоянию на 2016 г.), но не в IE 11. Если вам требуется поддержка старых браузеров, вы можете:источник
Для удаления одного элемента:
Для удаления всех элементов с определенным именем класса:
источник
if(list[i] && list[i].parentElement)
нужна линия? Разве существование каждого элемента не гарантируется тем фактом, что он был возвращенgetElementsByClassName
методом?document.getElementsByClassName(...
Вы можете просто использовать
element.remove()
источник
element.remove()
не является допустимым JavaScript и работает только в определенных браузерах, таких как Chrome .element.remove()
это правильный JavaScript с DOM4 и работает во всех современных браузерах, естественно, за исключением Internet Explorer.ChildNode.remove()
Метод удаляет объект из дерева , которому он принадлежит.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Вот скрипка, которая показывает, как можно позвонить
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Нет необходимости расширять NodeList. Уже реализовано.
**
источник
Вы можете напрямую удалить этот элемент, используя
remove()
метод DOM.вот пример:
источник
Согласно DOM уровню 4 спецификации, которая является текущей версией в разработке, есть некоторые новые методы удобно мутаций доступны:
append()
,prepend()
,before()
,after()
,replace()
, иremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
источник
Имя функции есть
removeChild()
, и как можно удалить ребенка, когда нет родителя? :)С другой стороны, вам не всегда нужно звонить так, как вы показали.
element.parentNode
является только помощником, чтобы получить родительский узел данного узла. Если вы уже знаете родительский узел, вы можете просто использовать его следующим образом:Пример:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
================================================== =======
Чтобы добавить что-то еще:
В некоторых ответах указано, что вместо использования
parentNode.removeChild(child);
можно использоватьelem.remove();
. Но, как я заметил, между этими двумя функциями есть разница, и она не упоминается в этих ответах.Если вы используете
removeChild()
, он вернет ссылку на удаленный узел.Но если вы используете
elem.remove();
, он не вернет вам ссылку.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Такое поведение можно наблюдать в Chrome и FF. Я считаю, что это стоит заметить :)
Надеюсь, мой ответ добавляет ценность к вопросу и будет полезен !!
источник
Функции, которые используют ele.parentNode.removeChild (ele), не будут работать для элементов, которые вы создали, но еще не вставили в HTML. Такие библиотеки, как jQuery и Prototype, разумно используют метод, подобный следующему, чтобы обойти это ограничение.
Я думаю, что JavaScript работает так, потому что первоначальные дизайнеры DOM считали родительскую / дочернюю и предыдущую / следующую навигацию более приоритетными, чем модификации DHTML, которые так популярны сегодня. Возможность читать из одного <input type = 'text'> и записывать в другое по относительному расположению в DOM была полезна в середине 90-х, когда динамическая генерация целых HTML-форм или интерактивных элементов графического интерфейса была едва ли не мерцанием в какой-то глаз разработчика
источник
ИМХО: причина этого та же, что и в других средах: вы выполняете действие, основанное на вашей «связи» с чем-либо. Вы не можете удалить его, пока вы связаны с ним.
Как резать ветку дерева. Во время резки садитесь на сторону, ближайшую к дереву, или результат будет ... неудачным (хотя и смешным).
источник
Это на самом деле происходит от FireFox ... на этот раз, IE был впереди пакета и позволил удалить элемент напрямую.
Это только мое предположение, но я считаю, что причина, по которой вы должны удалить ребенка через родителя, связана с тем, как FireFox обрабатывает ссылку.
Если вы вызываете объект для непосредственного совершения хари-кари, то сразу после его смерти вы все еще сохраняете эту ссылку на него. Это может привести к появлению нескольких неприятных ошибок ... например, не удаляя его, удаляя его, но сохраняя ссылки на него, которые кажутся действительными, или просто утечку памяти.
Я полагаю, что когда они поняли проблему, обходной путь заключался в том, чтобы удалить элемент через его родительский элемент, потому что, когда элемент ушел, вы теперь просто держите ссылку на родительский элемент. Это остановит всю эту неприятность, и (если, например, закрыть узел дерева узлом) будет довольно просто «застегнут».
Это должна быть легко исправляемая ошибка, но, как и во многих других вещах в веб-программировании, выпуск, вероятно, был спешным, что привело к этому ... и к тому времени, когда появилась следующая версия, достаточно людей использовали ее, чтобы изменить это. сломать кучу кода.
Опять же, все это просто мои догадки.
Однако я с нетерпением жду того дня, когда веб-программирование, наконец, получит полную чистку весны, все эти странные маленькие особенности исчезнут, и все начнут играть по тем же правилам.
Вероятно, на следующий день после того, как мой слуга-робот подал в суд на меня с зарплатой.
источник
removeChild
является метод DOM уровня 1Node
интерфейса .Из того, что я понимаю, удаление узла напрямую не работает в Firefox, только Internet Explorer. Итак, чтобы поддержать Firefox, вы должны обратиться к родителю, чтобы удалить его дочерний элемент.
Ссылка: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
источник
источник
Это лучшая функция для удаления элемента без ошибки скрипта:
Обратите внимание на
EObj=document.getElementById(EId)
.Это ОДИН знак равенства нет
==
.если элемент
EId
существует, то функция удаляет его, в противном случае возвращает falseerror
.источник