2012-11-13 8 views
10

Gibt es in JavaScript eine Möglichkeit, einem übergeordneten Knoten in einem Vorgang ein Array von untergeordneten Knoten hinzuzufügen?Wie kann ich ein Array von untergeordneten Knoten in einem Vorgang mit einem übergeordneten Knoten mithilfe von JavaScript anfügen?

Ich möchte dies in einem Arbeitsgang tun, um unnötige Repaints zu vermeiden.

Ich habe versucht, übergeordnete .appendChild(arrayOfNodes), aber das gibt eine Ausnahme.

Ich mache eine kleine Komponente, die unter mehreren Projekten wiederverwendet wird, ich möchte nicht auf irgendeine Bibliothek wie jQuery oder Zepto angewiesen sein.

+1

Nur aus Neugier (es sei denn, es ist eine Projektbeschränkung) warum keine ** jQuery **? – adamb

+0

Ich mache eine wiederverwendbare Komponente, und ich kann sagen, dass jQuery oder Zepto in diesem Projekt verwendet wird, so muss es Standard sein JavaScript –

Antwort

1

Sie eine Methode Node hinzufügen könnte, die intern die appendChild Methode aufruft:

(function() { 
    Node.prototype.appendChildren(arrayOfNodes) { 
    var length = arrayOfNodes.length; 
    for (var i = 0; i < length; i++) { 
     this.appendChild(arrayOfNodes[i]); 
    } 
    }()); 

die dann wie so verwendbar sein würde:

node.appendChildren(arrayOfNodes) 
+0

'Node.prototype' existiert nicht in IE <9. –

9

Sie ein Zwischen DocumentFragment verwenden könnten, das ist ein wenig verschachtelt, aber ist wahrscheinlich besser als Knoten zu einem Zeitpunkt, wenn Sie neu erstellte Knoten an einen vorhandenen Knoten innerhalb des Dokuments anhängen:

var frag = document.createDocumentFragment(); 
for (var i = 0; i < arrayOfNodes.length; ++i) { 
    frag.appendChild(arrayOfNodes[i]); 
} 
someElement.appendChild(frag); 
+0

Ich bin hübsch sicher, dass du etwasElement machen willst.appendChild (frag.cloneNode (true)). Ich weiß nicht warum, aber das ist es, was John Resig sagt, und ich bin geneigt, ihm zu vertrauen. – hobberwickey

+0

@hobberwickey: Ich bin nicht, aber ich kann mir nicht vorstellen, dass er das hier trotzdem empfehlen würde: es gibt keine Notwendigkeit, zu klonen, und wenn es Event-Handler auf den Knoten gibt, ist das Einfügen von Klonen definitiv falsch. –

+0

@hobberwickey: Der einzige Grund zu klonen wäre, wenn Sie mehrere Kopien des gleichen Satzes von Knoten in das Dokument einfügen möchten, was hier nicht erforderlich ist. Resigs Artikel ist leider in diesem Punkt nicht klar. –

1

Ich weiß, das ist irgendwie alt, aber ich hatte eine ähnliche Frage. Ich entschied mich, eine einfache Funktion zu schreiben, die einen Eltern (Knoten) und Kinder Knoten (Knotenliste oder Array von Knoten), keine Erweiterung von Prototypen oder macht es komplizierter, als ich dachte, dass es sein musste ...

function appendChildren(parent, children) { 
    for (var i=0; i<children.length;i++) { 
     child = children[i]; 
     parent.appendChild(child); 
    } 
    return parent; 
} 
+0

Fügen Sie einfach "Element.prototype.appendChildren = appendChildren;" hinzu und entfernen Sie "parent" arg, es wird 'this' sein – Guja1501

Verwandte Themen