2015-08-06 21 views
5

O ile mi wiadomo, funkcja .prop() może zrobić wszystko, co może zrobić funkcja .attr(), ale w ogólnie bezpieczniejszy i prostszy sposób.Czy jest jakaś sytuacja, w której muszę użyć .attr() nad .prop()?

Na przykład:

  • Jeśli chcę uzyskać domyślny stan pole wyboru w HTML, mogę zrobić $('myCheckbox').prop('defaultChecked') (zamiast $('myCheckbox').attr('checked')). To rzeczywiście wydaje się bezpieczniejsze niż używanie .attr('checked'), jako atrybut może stracić to wartość, jeśli pole jest dynamicznie zmieniane, natomiast .prop('defaultValue') utrzymuje wartość (np http://jsfiddle.net/p1Lrgwnb/1/)
  • Choć często widzę .attr() spójny z wartościami takimi jak id i name na przykładach StackOverflow, .prop() działa również z tymi. Jestem nieświadomy jakiegokolwiek powodu, dla którego .attr() wydaje się być preferowany dla tych wartości innych niż tradycyjne konwencje i nawyki.

Czy istnieje kiedykolwiek przypadek użycia gdzie trzeba użyć .attr() lub że funkcja .prop() nie dałby mi niezbędne informacje?

EDIT: To pytanie nie ma nic wspólnego z tym, co jest różnica między .prop() i .attr(). Przestudiowałem te pytania na temat StackOverflow dogłębnie, w tym jeden link poniżej (stackoverflow.com/questions/5874652/prop-vs-attr). Z mojego pytania jasno wynika, że ​​w pełni rozumiem różnicę między tymi dwoma, prawdopodobnie lepiej niż większość. Moje pytanie brzmi: czy są jakieś okoliczności, które muszę musi użyć .attr(), co jest zupełnie innym pytaniem od .prop() vs .attr().

+1

Cóż zawsze [to istniejąca wcześniej post] [1], aby odpowiedzieć na to pytanie. [1]: http://stackoverflow.com/questions/5874652/prop-vs-attr – dudewad

+2

mam do ponownego głosowania na to pytanie, ponieważ nie wierzę, żadnych odpowiedzi na pytania związanego faktycznie dyskutować, kiedy programista może chcieć użyć 'attr()' w scenariuszu świata rzeczywistego. – StriplingWarrior

+1

@dudewad Proszę ponownie przeczytać moje pytanie. To całkowicie różni się od pytania, które łączyłeś, które przeczytałem i przestudiowałem dogłębnie przed opublikowaniem mojego pytania. Jeśli możesz znaleźć odpowiedź na moje pytanie w tym linku, proszę odwołać się do niego. – dallin

Odpowiedz

3
<input id="check1" checked="checked" type="checkbox" /> 
.attr('checked') //returns checked 
.prop('checked') //returns true 
.is(':checked') //returns true 

Metoda prop zwraca wartość logiczną dla sprawdzonej, wybranej, wyłączonej, readOnly..etc, gdy attr zwraca zdefiniowany ciąg znaków. Tak więc możesz bezpośrednio użyć .prop ("zaznaczone"), jeśli warunek.

.attr() wywołuje metodę .prop() wewnętrznie, więc metoda .attr() będzie nieco wolniejsza niż uzyskanie dostępu do nich bezpośrednio przez .prop().

Dla jQuery 1.6+, rekwizyt będzie głównie używany, ponieważ jest prosty i szerszy niż atr. W większości starych projektów attr służy do uzyskiwania aktualnych informacji o stanie elementu. Ale teraz rekwizyt podjął tę pracę i został zastąpiony przez rekwizyt.

Check this link