2012-11-13 12 views
10

Czy w JavaScript istnieje sposób dodawania tablicy węzłów potomnych do węzła nadrzędnego w jednej operacji?Jak mogę dołączyć tablicę węzłów potomnych do węzła nadrzędnego w jednej operacji przy użyciu JavaScript?

Chcę to zrobić w jednej operacji, aby zapobiec niepotrzebnym odświeżeniom.

Próbowałem rodzica .appendChild(arrayOfNodes), ale to daje wyjątek.

Tworzę mały komponent, który zostanie użyty ponownie w kilku projektach, nie chcę polegać na żadnej bibliotece, takiej jak jQuery lub Zepto.

+1

Po prostu z ciekawości (chyba że jest to ograniczenie projektu), dlaczego nie ** jQuery **? – adamb

+0

Tworzę kompilator wielokrotnego użytku i mogę założyć, że jQuery lub Zepto są używane w tym projekcie, więc musi to być standardowa wersja JavaScript –

Odpowiedz

1

Można dodać metodę Node, który wywołuje metodę appendChild wewnętrznie:

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

które następnie być użyteczny tak:

node.appendChildren(arrayOfNodes) 
+0

'Node.prototype' nie istnieje w IE <9. –

9

Można użyć pośrednią DocumentFragment, który jest trochę zawiłe, ale prawdopodobnie działa lepiej niż robi to węzeł na raz, jeśli dodajesz nowo utworzone węzły do ​​istniejącego węzła w dokumencie:

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

Jestem ładna na pewno będziesz chciał zrobić someElement.appendChild (frag.cloneNode (true)). Nie wiem dlaczego, ale tak mówi John Resig i jestem skłonny mu zaufać. – hobberwickey

+0

@hobberwickey: Nie jestem, ale nie mogę sobie wyobrazić, że on i tak by to polecił: nie ma potrzeby klonowania, a jeśli w węzłach wstawianych są moduły obsługi zdarzeń, to wstawianie klonów jest zdecydowanie błędne. –

+0

@hobberwickey: Jedynym powodem klonowania byłoby wstawienie kilku kopii tego samego zestawu węzłów do dokumentu, co nie jest wymagane tutaj. W tym punkcie artykuł Resig nie jest jednak jasny. –

1

Wiem, że to trochę stare, ale miałem podobne pytanie. Postanowiłem napisać prostą funkcję, która pobiera węzły nadrzędne (węzeł) i podrzędne (nodeList lub tablica węzłów), nie przedłużając żadnych prototypów ani nie czyniąc tego bardziej skomplikowanym, niż myślałem, że musi być ...

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

Po prostu dodaj to 'Element.prototype.appendChildren = appendChildren;' i usuń 'parent' arg, to będzie' this' – Guja1501

Powiązane problemy