Удалить элемент по id - PullRequest
       71

Удалить элемент по id

1045 голосов
/ 01 августа 2010

При удалении элемента со стандартным JavaScript вы должны сначала перейти к его родительскому элементу:

var element = document.getElementById("element-id");
element.parentNode.removeChild(element);

Необходимость сначала перейти к родительскому узлу кажется мне немного странной, есть ли причина, по которой JavaScript работает следующим образомэто?

Ответы [ 16 ]

5 голосов
/ 08 августа 2014

Согласно спецификации DOM level 4, которая является текущей версией в разработке, есть несколько новых удобных методов мутации: append(), prepend(), before(), after(), replace() и remove().

http://red -team-design.com / удаление элемента с простым javascript-методом удаления /

3 голосов
/ 12 мая 2017

Необходимость сначала перейти к родительскому узлу кажется мне немного странной, причина JavaScript работает так?

ИМХО: причина этого та же, что я видел в других средах: вы выполняете действие, основанное на вашей «связи» с чем-либо. Вы не можете удалить его, пока связаны с ним.

Как резать ветку дерева. Во время резки садитесь на сторону, ближайшую к дереву, или результат будет ... неудачным (хотя и смешным).

2 голосов
/ 19 августа 2011

Это на самом деле происходит от FireFox ... на этот раз IE опередил пакет и позволил удалить элемент напрямую.

Это только мое предположение, но я считаю, что причина, по которой вы должны удалить ребенка через родителя, связана с тем, как FireFox обрабатывает ссылку.

Если вы вызываете объект для совершения хари-кари напрямую, то сразу после его смерти вы все еще сохраняете эту ссылку на него. Это может привести к появлению нескольких неприятных ошибок ... например, не удаляя его, удаляя его, но сохраняя ссылки на него, которые кажутся действительными, или просто утечку памяти.

Я полагаю, что когда они поняли проблему, обходным путем было удалить элемент через его родителя, потому что когда элемент пропал, вы теперь просто держите ссылку на родителя. Это остановит все эти неприятности, и (если, например, закрыть узел дерева узлом) будет довольно красиво «застегнуто».

Это должна быть легко исправляемая ошибка, но, как и во многих других вещах в веб-программировании, выпуск, вероятно, был спешным, что привело к этому ... и к тому времени, когда появилась следующая версия, достаточно людей использовали ее, чтобы изменить это приведет к взлому кода.

Опять же, все это просто мои догадки.

Однако я с нетерпением жду того дня, когда веб-программирование, наконец, получит полную весеннюю очистку, все эти странные маленькие особенности исчезнут, и все начнут играть по тем же правилам.

Вероятно, на следующий день после того, как мой слуга-робот подаст на меня в суд на зарплату.

0 голосов
/ 03 октября 2012
// http://javascript.crockford.com/memory/leak.html
// cleans dom element to prevent memory leaks
function domPurge(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        for (i = a.length - 1; i >= 0; i -= 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            domPurge(d.childNodes[i]);
       }
    }
}

function domRemove(id) {
    var elem = document.getElementById(id);
    domPurge(elem);
    return elem.parentNode.removeChild(elem);
}
0 голосов
/ 17 мая 2012

Это лучшая функция для удаления элемента без ошибки скрипта:

function Remove(EId)
{
    return(EObj=document.getElementById(EId))?EObj.parentNode.removeChild(EObj):false;
}

Примечание к EObj=document.getElementById(EId).

Это ОДИН знак равенства, а не ==.

если элемент EId существует, то функция удаляет его, в противном случае возвращается false, а не error.

0 голосов
/ 02 августа 2010

Насколько я понимаю, удаление узла напрямую не работает в Firefox, только в Internet Explorer.Итак, чтобы поддержать Firefox, вам нужно подойти к родителю, чтобы удалить его потомка.

Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...