Frage

Ich habe ein Formular mit mehreren Spannweiten mit id = „myid“. Ich möchte alle Elemente mit dieser ID aus dem DOM entfernen zu können, und ich denke, jQuery ist der beste Weg, es zu tun. Ich habe herausgefunden, wie den $ .remove () -Methode verwendet eine Instanz dieser ID zu entfernen, indem man einfach tun:

$('#myid').remove()

aber das ist natürlich entfernt nur die erste Instanz von myid. Wie kann ich Iterierte über alle Instanzen myid und entfernen Sie sie alle? Ich dachte, die jquery $ .each () -Methode der richtige Weg sein könnte, aber ich kann nicht die Syntax zu iterieren alle Instanzen myid herauszufinden, und entfernen Sie sie alle.

Wenn es eine saubere Art und Weise, dies zu tun mit regelmäßigen JS (nicht mit jQuery) Ich bin offen zu, dass. Vielleicht sind das Problem, dass ids soll eindeutig sein (das heißt sind Sie nicht mehrere Elemente mit id = „myid“ haben soll)?

Danke,

Chris

War es hilfreich?

Lösung

.remove() sollten alle von ihnen entfernen. Ich denke, das Problem ist, dass Sie eine ID verwenden. Es ist angeblich nur zu ein HTML-Element mit einer bestimmten ID auf der Seite, so dass jQuery optimiert und nicht für sie suchen alle. Verwenden Sie ein Klasse statt.

Andere Tipps

Alle Ihre Elemente sollte eine eindeutige IDs haben, so sollte es nicht mehr als ein Element sein mit #myid

Ein „id“ ist eine eindeutige Kennung. Jedes Mal, dieses Attribut in einem Dokument verwendet wird, muss es einen anderen Wert hat. Wenn Sie dieses Attribut als Haken verwenden für Stylesheets kann es sinnvoll sein, Gebrauchsklassen (die Gruppenelemente) als ID (die verwendet werden, genau ein Element zu identifizieren).

Neverthless, versuchen Sie dies:

$("span[id=myid]").remove();

id von dom Elemente schrie eindeutig sein. Verwenden Sie Klasse statt (<span class='myclass'>). Um alle Spanne mit dieser Klasse zu entfernen:

$('.myclass').remove()

Wenn Sie alle Elemente mit passendem ID Teilen zu entfernen, zum Beispiel:

<span id='myID_123'>
<span id='myID_456'>
<span id='myID_789'>

versuchen, diese:

$("span[id*=myID]").remove();

vergessen Sie nicht, die ‚*‘ - das wird entfernt sie alle auf einmal - cheers

Arbeits Demo

Sie sollten eine class für mehrere Elemente werden unter Verwendung als ein id nur ein einziges Element zu sein, gemeint ist. Um Ihre Frage auf der .each() Syntax zu beantworten aber das ist, was es würde so aussehen:

$('#myID').each(function() {
    $(this).remove();
});

Offizielle JQuery Dokumentation hier .

Der sauberste Weg, es zu tun ist durch html5 Selektoren api verwenden, speziell querySelectorAll().

var contentToRemove = document.querySelectorAll("#myid");
$(contentToRemove).remove(); 

Die querySelectorAll() Funktion gibt ein Array von dom Elemente eine bestimmte ID übereinstimmen. Sobald Sie das zurückgegebene Array zu einem var zugewiesen haben, dann können Sie es als Argument für jquery remove() passieren.

Wie bereits gesagt, nur ein Element eine spezifische ID hat. Verwenden Sie Klassen statt. Hier ist jQuery-freie Version, die Knoten zu entfernen:

var form = document.getElementById('your-form-id');
var spans = form.getElementsByTagName('span');

for(var i = spans.length; i--;) {
    var span = spans[i];
    if(span.className.match(/\btheclass\b/)) {
        span.parentNode.removeChild(span);
    }
}

getElementsByTagName href="http://www.quirksmode.org/dom/w3c_core.html#gettingelements" rel="nofollow"> ist die Cross-Browser-kompatible Methode , die verwendet werden können, Hier. getElementsByClassName wäre viel besser, ist aber nicht von Internet Explorer <= IE 8 unterstützt.

Arbeits Demo

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top