2016-05-18 2 views
1

Ich habe etwas Javascript-Code, um ein Element von einer HTMLCollection wie in Code unten zu entfernen. Ich bekomme einen Fehler, wenn der Splice aufgerufen wird, der sagt: allInputs.splice is not a function. Ich muss Elemente aus HTMLCollection entfernen, wenn der Elementtyp nicht vom Schaltflächentyp ist.Wie man ein Element von HTMLCollection entfernt?

Frage: Wie würde ich einen Artikel aus einer solchen Sammlung entfernen?

Ich könnte nicht gelöschte Objekte in ein Array übertragen und dann könnte ich mit dem Array anstelle der ursprünglichen HTMLCollection arbeiten, aber nicht sicher, ob es eine andere kürzere Möglichkeit gibt, dies zu tun.

JavaScript-Code

var allInputs = contentElement.getElementsByTagName('input'); 
    for (var i = (allInputs.length - 1) ; i >= 0; i--) { 
     if (allInputs[i].type !== "button") { 
      allInputs.splice(i, 1);//this is throwing an error since splice is not defined 
     } 
    } 
+0

Das erste Semikolon in der For-Schleife scheint irgendwie fehl am Platz ... –

+0

@bjskistad Sieht gut aus für mich. –

+0

@bjskistad, Ich gehe rückwärts, da ich Elemente aus der Sammlung entfernen möchte. – Sunil

Antwort

6

HTMLCollection ist ein Live-Array-ähnliches Objekt, das heißt, wenn Sie ein Element aus einer solchen Sammlung entfernen müssen, werden Sie es aus dem DOM zu entfernen. Sie können es immer in ein Array für Manipulationen klonen.

4

Sie müssen es aus dem DOM zu entfernen, so ersetzen:

allInputs.splice(i, 1); 

mit:

allInputs[i].parentNode.removeChild(allInputs[i]) 

, die kompatibel wilth ist sogar alte Browser wie IE 6. Die Sammlung wird automatisch aktualisiert. Das Rückwärtssammeln der Sammlung ist eine gute Idee, denn jedes Mal, wenn Sie ein Mitglied entfernen, wird es kürzer.

Beachten Sie, dass:

[].slice.call(allInputs) 

in Browsern wie IE8 fehl, die Host-Objekte nicht zulassen diese in integrierten Methoden sein.

0

Um eine neu erstellte img von HTMLCollection Bilder Ich würde uset nächste Saite

img.ownerDocument.images[img.index].remove() 

wo img.index definiert wurde auf die Schaffung

0

entfernen Sie auch verwenden können, Spleißmethode des Arrays, und beachten Sie, dass die length -Eigenschaft einer Sammlung schreibgeschützt ist, so dass Sie sie explizit vor dem Spleiß schreibbar machen müssen:

Object.defineProperty(allInputs, 'length', { 
writable: 'true' 
}); 
Array.prototype.splice.call(allInputs, i, 1);