2012-10-29 15 views
6

Jak mogę utworzyć tagi dynamiczne?Tworzenie zakresu dynamicznego

$("<img />").attr({ 
    id: "image-1", 
    src: "/images/flower.png", 
}).appendTo("#" + imgContainer); 

To stworzy <img src="/images/flower.png" id="image-1" />

Chcę utworzyć <span> tag wokół <img> tagu.

tj <span><img src="/images/flower.png" id="image-1" /></span>

Odpowiedz

6

Można użyć wrap():

$("<img />").attr({ 
    id: "image-1", 
    src: "/images/flower.png" 
}).appendTo("#" + imgContainer).wrap("<span />") 
+0

-1 za przeoczenie [aspekt wydajności] (http://stackoverflow.com/a/13134858/1081234) –

2

Można użyć wrap() zawinąć jednego elementu wewnątrz drugiego. Na przykład:

$("<img />").attr({ 
    id: "image-1", 
    src: "/images/flower.png", 
}) 
.appendTo("#" + imgContainer) 
.wrap("<span />"); 
+0

-1 podobnie jak w przypadku @VisioN za przeoczenie [aspekt wydajności] (http://stackoverflow.com/a/13134858/1081234) –

0

Operacje DOM są oh-drogie; po prostu przygotuj znaczniki, których szukasz, i , a następnie dodaj je w razie potrzeby!

//Before: 
$("<img />")     //#1, create an element outside of the tree 
.attr({      //#2? change its attributes 
    id: "image-1", 
    src: "/images/flower.png" 
}) 
.appendTo("#" + imgContainer) //#3, add the element to DOM 
.wrap("<span />");    //#4, create and add another element to DOM 

//After: 
$('<span><img src="/images/flower.png" id="image-1"></span>') //#1 
.appendTo("#" + imgContainer);         //#2 

Oto a jsperf test case co skutkuje ~ 5K ops/s na pierwszym przypadku i ~ 14K dla drugiego (na moim całkiem przyzwoity pudełku).

Nie jest to również przedwczesna optymalizacja. Jeśli masz na przykład wypełniony ajaxem stół 7x10 i każdą komórkę tworzysz osobno ... i zawijasz je do elementów <tr> ... a następnie dodajesz do tabeli, nakłada się suma. Działaj na łańcuchu, a twój skrypt będzie co najmniej 80 razy szybszy!

Innym aspektem, o którym należy pamiętać, jest to, że jsperf wyraźnie mierzy wydajność javascript. Jeśli manipulujesz tabelą, jej treść będzie jeszcze bardziej agresywna re-painted/re-flown.

+0

@VisioN: umm ... ** nie, ** [ten kod jest jeszcze wolniejszy niż oryginał] (http://jsperf.com/string-vs-dom) - chodzi o wszystko wybieranie poprawnych skrótów i unikanie niepotrzebnych numerów: –

+0

@VisioN: ಠ_ಠ Czy próbowałeś? W powyższym komentarzu zaktualizowałem link jsperf –

Powiązane problemy