2012-03-10 7 views
5

Mam for pętli do generowania rząd div s, mój kod jestjQuery - grupa lub concatenate jquery obiekty utworzone przez pętlę, tak aby wykorzystać appendTo tylko raz

for(j=0; j<7; j++) { 
    $('<div/>', { 
    id: 'unique', 
    html: 'whatever' 
}).appendTo('#container'); 

Kod ten wydaje się poszukiwać #container dla każdej iteracji i dołącza do niej nowy div.

Jak napisać kod, aby móc najpierw utworzyć wszystkie elementy div, a następnie dołączyć je do kontenera jednocześnie? Przepraszam, próbowałem wyszukiwać słowa kluczowe, takie jak concatenate/group/add jquery objects, i wydaje się, że nie mają właściwych wyników wyszukiwania.

TIA

+0

Dlaczego chcesz, aby kod tylko raz wywoływał 'appendTo'? – JaredPar

+1

@JaredPar, ponieważ jak rozumiem, jquery tylko odszuka poprawny div raz zamiast wielokrotnie jako iteracja pętli. – Jamex

Odpowiedz

7

rozwiązanie Xander powinien działać dobrze. Osobiście nie lubię pracy z "długimi" ciągami HTML w js. Oto rozwiązanie, które wygląda bardziej jak twój kod.

var elements = []; 
for(j=0; j<7; j++) { 
    var currentElement = $('<div>', { id: i, text: 'div' }); 
    elements.push(currentElement[0]); 
} 
$('#container').append(elements); 
+0

Dzięki Justin, to jest coś, co miałem na myśli. Zastanawiam się, czy istnieje inny sposób "grupowania" obiektów, ponieważ ta metoda wprowadza tablicę, która może opodatkować zasoby. – Jamex

+0

Tak, możesz potencjalnie zapłacić niewielki podatek od tworzenia obiektów jQuery. Dostajesz jednak dodatkowe korzyści z łatwiejszych zdarzeń wiążących (prawdopodobnie będziesz chciał przekazać te wydarzenia, jeśli są one takie same dla każdego elementu), a dzięki temu zyskasz dodatkową korzyść związaną z zamknięciem tych wydarzeń (nie wykazano tutaj), w razie potrzeby. Nie sądzę, że osiągniesz wzrost wydajności, dopóki nie osiągniesz tysięcy elementów. –

+0

Witaj Justin, kod działa, ale nie rozumiem elementów line.push (currentElement [0]); Dlaczego currentElement ma [0]? – Jamex

4

To może pomóc

var htm = ''; 
for(j=0; j<7; j++) { 
    htm+= '<div id="unique_'+i+'">whatever</div>'; 
} 

$('#container').html(htm); // Or append instead of html 
+0

Dzięki Jose/Xander, tak naprawdę nie chciałem tego robić w ten sposób, ponieważ nie chciałem bałagać z pisaniem ciągu tekstowego. Myślę, że kod Justina jest bardziej z tego, co miałem na myśli. – Jamex

+1

OTOH, tworzenie zmiennej łańcuchowej powinno być mniej podatne niż obiekty jquery. – Jamex

Powiązane problemy