2010-11-18 8 views

Odpowiedz

6

Są one dość różne operacje:

attr (x, '') ustawia atrybut pusty ciąg

removeAttr (x) usuwa właściwość na obiekt, jeśli to możliwe, lub usuwa go i resetuje go do wartości domyślnej, jeśli jest zdefiniowany przez DTD dla tej klasy obiektu.

3

Niektóre atrybuty to booleans (niezależnie od tego, czy istnieją, czy nie istnieją). Weźmy na przykład atrybut disabled. Jeśli istnieje, to prawda, nie ma znaczenia, jaka jest ustawiona wartość. Więc musisz użyć .removeAttr('disabled'), aby ponownie włączyć element. Jednak jQuery trochę to normalizuje, możesz użyć .attr('disabled', false);. Tak więc myślę, że odpowiedź jest semantyką.

Edit:

Ta odpowiedź tylko dostał kilka upvotes sugerujących, że odpowiedział na to kilka lat temu.

Użyj tego zamiast na właściwości -

.prop('disabled', true) // set as disabled 
.prop('disabled', false) // set as enabled 
.prop('disabled') // return boolean (is this disabled?) 

NIE użytkowania removeProp („wyłączone”), jak to będzie usunąć właściwość z obiektu DOM (co nie jest to, co masz zamiar zrobić).

9

Biorąc pod uwagę, że defninition removeAttr z biblioteki jQuery (patrz poniżej). Powiedziałbym tak.

removeAttr: function(name, fn) { 
     return this.each(function(){ 
      jQuery.attr(this, name, ""); 
      if (this.nodeType === 1) { 
       this.removeAttribute(name); 
      } 
     }); 

Źródło: Jquery 1.4.3 uncompressed version

Mimo że jest z natury subiektywna. Myślę, że używanie metody removeAttr jest bardziej samo-dokumentującym podejściem. Jednak widziałem innych ludzi, którzy myślą wręcz przeciwnie.

+3

Są różne, przez ten sam kod - dla elementów ustawia on attr na '' * AND * (dla elementów) usuwa atrybut z DOM. –

+0

@pst - Punkt wzięty. Zmieniłem "Nie" na "tak" – JohnFx

+0

Oczywiście jest dość późno, ale sprawdź odpowiedź @ john-strickler. Ustawienie pustego atrybutu pozostawia go w tagu, więc jest "obecny". Jest to ważne w przypadku atrybutów używanych jako flagi, takich jak "wyłączone" i inne. – rewritten

2

Pierwsza różnica:

.removeAttr('name') // try to remove the attribute 'name' from the DOM 
.attr('name', '') // set the attribute 'name' to empty string 

Druga różnica, prawdopodobnie się tylko do mnie, jest .removeAttr() działa poprawnie w Firefox i IExplorer ale nie bardzo dobrze w Chrome i nie działa w ogóle na Safari.