Wie entferne ich Elemente, die mit querySelectorAll abgerufen wurden?
Lesezeit: 2 Minuten
Randy Halle
Das scheint etwas zu sein, das eine schnelle Antwort hätte, aber ich kann keine finden. Vielleicht suche ich nach den falschen Begriffen? Bitte keine Bibliotheken, obwohl ich keine Cross-Browser-Fallbacks benötige, ziele ich auf alle neuesten Versionen dieses Projekts ab.
Ich bekomme einige Elemente:
element = document.querySelectorAll(".someselector");
Das funktioniert, aber wie lösche ich diese Elemente jetzt? Muss ich sie durchschleifen und das tun element.parentNode.removeChild(element); Sache, oder gibt es eine einfache Funktion, die ich vermisse?
Ja, du hast fast recht. .querySelectorAll gibt a zurück eingefrorene NodeList. Sie müssen es wiederholen und Dinge tun.
Selbst wenn Sie nur ein Ergebnis erhalten, müssten Sie über den Index darauf zugreifen, z
elements[0].parentNode.removeChild(elements[0]);
Wenn Sie nur wollen um nach einem Element abzufragen, verwenden Sie .querySelector stattdessen. Da bekommt man einfach die Knotenreferenz ohne dass mit einem Index darauf zugegriffen werden muss.
@jAndy danke für die Antwort. Ich muss den ersten Knoten der NodeList entfernen. Gibt es eine Möglichkeit, den ersten Knoten direkt zu entfernen?
– Raghvendra
31. Januar 2017 um 4:02 Uhr
Nun, Sie können einfach anrufen elementsList[ 0 ].remove(); in der heutigen DOM-API.
– jAndy
1. Februar 2017 um 13:34 Uhr
Ivan Sivak
Seit der NodeList unterstützt bereits die forEach Sie können einfach verwenden:
<div>
<span class="someselector">element 1</span>
<span class="someselector">element 2</span>
there shouldn't be any of the above "element" spans after you run the code
</div>
Internet Explorer-Unterstützung. IE unterstützt das nicht forEach auf der NodeList und IE unterstützt auch nicht remove Methode an Element Objekte. Wenn Sie also den obigen Code auch im IE ausführen möchten, fügen Sie einfach die folgenden Zeilen am Anfang Ihres JavaScript-Codes hinzu und verwenden Sie zum Entfernen eines Elements die Node.removeChild anstelle vonIch benutze die Element.remove() Polyfill):
if (!NodeList.prototype.forEach && Array.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
// ..then continue as usual with the forEach
document.querySelectorAll(".someselector").forEach(e => e.parentNode.removeChild(e));
<div>
<span class="someselector">element 1</span>
<span class="someselector">element 2</span>
Should be empty
</div>