2012-02-01 15 views
7

Jakie są zalety używania attr() zamiast używania addClass() w jquery?Korzyści z używania attr() nad addClass w jquery

+3

uruchomić testy siebie: http://jsperf.com/jquery-addclass-vs-attr-class –

+0

wydajność, podczas gdy * czasami * ważne, nie jest jedynym czynnikiem decydującym o co jest "dobre" lub "złe". Pytanie prawdopodobnie dotyczy korzyści jakiegokolwiek rodzaju, a nie tylko szybkości. – cHao

+0

Dla mnie jest to addClass, który jest szybszy na jsperf.com ... To dobrze, bo zawsze używałam addClass. Bałem się zmienić wszystko: -p – user1040899

Odpowiedz

23

Gdy używasz metody attr do ustawienia klasy dowolnego elementu, zastąpi ona istniejącą nazwę klasy dowolną wartością, którą przekazujesz jako drugi argument metody attr.

Jeśli używasz metody addClass do dodania dowolnej klasy do elementu, to po prostu dodasz klasę i zachowasz istniejące klasy. Jeśli klasa do dodania już istnieje, po prostu ją zignoruje.

E.g.

<div id="div1" class="oldClass"></div> 

Korzystanie $('#div1').attr('class', 'newClass') da

<div id="div1" class="newClass"></div> 

Gdzie, jak przy użyciu $('#div1').addClass('newClass') dadzą

<div id="div1" class="oldClass newClass"></div> 

Tak jest zawsze adviseable używać addClass/removeClass do manupulate klas elementów HTML za pomocą jQuery. Ale na końcu zależy to od wymagań, jakich użyć, kiedy.

2

attr (a, b) ustawia atrybut "a" elementu na "b".

addClass (a) dodaje klasy "A" do elementu

na przykład ...

html

<div id="box" class="myClass"></div> 

Script

$("#box").attr("class", "myOtherClass"); 

Wynik

<div id="box" class="myOtherClass"></div> 

I ...

Html

<div id="box" class="myClass"></div> 

Script

$("#box").addClass("myOtherClass"); 

Re DOPROWADZIĆ

<div id="box" class="myClass myOtherClass"></div> 

jQuery Linki:

http://api.jquery.com/attr/

http://api.jquery.com/addClass/

5

addClass() ma kilka zalet w stosunku do manipulowania klasę z attr('class'):

  • To semantycznie jaśniejsze.addClass i removeClass manipulują atrybutem elementu class (lub właściwością className) i to wszystko. Trochę trudniej jest im sprawić, by kodeks był dla ciebie kłamstwem. Jeśli powiesz, że $whatever.addClas("selected"), otrzymasz błąd runtime, ale jeśli powiesz $whatever.attr('clas', 'selected'), to po prostu nie wydaje się nic. Nadal "działa" z punktu widzenia JS, bo kto wie? Możesz chcieć, aby ustawić atrybut clas. Takie rzeczy zdarzają się, gdy próbujesz użyć szwajcarskiego scyzoryka jako otwieracza do puszek.

  • Działa z wieloma klasami. Jeśli używasz attr do dodawania i usuwania klas CSS, a będzie ich więcej niż jeden (co jest dość powszechne), musisz wykonać pewne przetwarzanie ciągów, aby nie przeszkadzać innym zastosowanym klasom lub mieć ta sama klasa powtórzona 50 razy. addClass i removeClass zrób to za Ciebie.

  • To najwyraźniej o wiele szybciej.

Nie mogę myśleć o żadnych korzyści z attr('class'...) ponad addClass. Ogólnie rzecz biorąc, attr jest, gdy nie masz innego wbudowanego sposobu manipulowania atrybutem. W tym przypadku robisz, więc powinieneś tego używać.

Powiązane problemy