Czy w jQuery występuje ogólnie różnica między removeAttr(x)
a attr(x, '')
?removeAttr (x) vs. attr (x, '') w jQuery
Jeśli tak, kiedy używać każdego z nich?
Czy w jQuery występuje ogólnie różnica między removeAttr(x)
a attr(x, '')
?removeAttr (x) vs. attr (x, '') w jQuery
Jeśli tak, kiedy używać każdego z nich?
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.
.removeAttr(x);
jest odpowiednikiem .removeAttribute("x");
, natomiast .attr(x, '')
po prostu ustawia .x
na pusty ciąg znaków. Aby uzyskać więcej informacji, patrz jQuery removeAttr
ref i odpowiedni mozilla removeAttribute
ref.
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ć).
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.
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.
Są różne, przez ten sam kod - dla elementów ustawia on attr na '' * AND * (dla elementów) usuwa atrybut z DOM. –
@pst - Punkt wzięty. Zmieniłem "Nie" na "tak" – JohnFx
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