Jak mogę usunąć węzeł potomny w HTML za pomocą JavaScript?

Czy istnieje taka funkcja jak document.getElementById("FirstDiv").clear()?

Author: Alexander Elgin, 2008-08-17

9 answers

Aby odpowiedzieć na pierwotne pytanie-istnieją różne sposoby, aby to zrobić, ale poniżej byłoby najprostsze.

Jeśli masz już uchwyt do węzła podrzędnego, który chcesz usunąć, tzn. masz zmienną JavaScript, która zawiera odniesienie do niego:

myChildNode.parentNode.removeChild(myChildNode);

Oczywiście, jeśli nie korzystasz z jednej z licznych bibliotek, które już to robią, chciałbyś utworzyć funkcję, która by to wyodrębniła:

function removeElement(node) {
    node.parentNode.removeChild(node);
}

EDIT: jak wspominali inni: jeśli jeśli masz jakieś procedury obsługi zdarzeń podłączone do usuwanego węzła, powinieneś upewnić się, że je odłączyłeś, zanim Ostatnie odniesienie do usuwanego węzła wyjdzie poza zakres, aby nie wyciekła pamięć ze słabych implementacji interpretera JavaScript.

 89
Author: Jason Bunting,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 05:56:33

Jeśli chcesz wyczyścić div I usunąć wszystkie węzły potomne, możesz umieścić:

var mydiv = document.getElementById('FirstDiv');
while(mydiv.firstChild) {
  mydiv.removeChild(mydiv.firstChild);
}
 43
Author: eplawless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-12 03:38:41

TargetNode.remove ()

Jest to zalecane przez W3C od końca 2015 roku i jestvanilla JS . Znacznie lepiej/czystsze niż poprzednia metoda.

Dla Twojego przypadku użycia:

document.getElementById("FirstDiv").remove();

Jeśli potrzebujesz polyfill, aby zapewnić kompatybilność wsteczną:

if (!('remove' in Element.prototype)) {
    Element.prototype.remove = function() {
        if (this.parentNode) {
            this.parentNode.removeChild(this);
        }
    };
}

Mozilla Docs

Obsługiwane Przeglądarki - 92% Mar 2018

 5
Author: Gibolt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-17 19:27:52

Musisz usunąć wszelkie procedury obsługi zdarzeń ustawione na węźle przed usunięciem go, aby uniknąć wycieków pamięci w IE

 4
Author: Polsonby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-17 18:03:46

A jQuery solution

HTML

<select id="foo">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

Javascript

// remove child "option" element with a "value" attribute equal to "2"
$("#foo > option[value='2']").remove();

// remove all child "option" elements
$("#foo > option").remove();

Bibliografia:

Atrybut równa się Selektor [nazwa = wartość]

Wybiera elementy, które mają określony atrybut z wartością dokładnie równa pewnej wartości.

Child Selector ("rodzic > dziecko")

Wybiera wszystkie bezpośrednie elementy potomne określone przez" dziecko " elementów określone przez "parent"

.usunąć()

Podobne do .empty(), the .usunąć() metoda pobiera elementy z drzewa DOM. Używamy .Usuń () gdy chcemy usunąć sam element, jak również wszystko w środku. Oprócz same elementy, wszystkie związane zdarzenia i dane jQuery związane z elementy są usuwane.

 3
Author: Chris Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-02 14:02:40

Użyj następującego kodu:

//for Internet Explorer
document.getElementById("FirstDiv").removeNode(true);

//for other browsers
var fDiv = document.getElementById("FirstDiv");
fDiv.removeChild(fDiv.childNodes[0]); //first check on which node your required node exists, if it is on [0] use this, otherwise use where it exists.
 2
Author: eagle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-31 17:07:15
    var p=document.getElementById('childId').parentNode;
    var c=document.getElementById('childId');
    p.removeChild(c);
    alert('Deleted');

P jest węzłem nadrzędnym, a c węzłem podrzędnym
parentNode jest zmienną JavaScript, która zawiera odniesienie do rodzica

Easy to understand

 1
Author: Vivek Tiwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 11:51:43

Powinieneś umieć korzystać zMetoda RemoveNode węzła lub .Metoda RemoveChild węzła nadrzędnego.

 0
Author: EBGreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-17 17:54:01

Prawdopodobnie powinieneś użyć biblioteki JavaScript, aby robić takie rzeczy.

Na przykład MochiKit ma funkcję removeElement , a jQuery ma remove.

 0
Author: Mike Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-17 17:58:55