Zatem jQuery 1.6 ma nową funkcję prop()
.
$(selector).click(function(){
//instead of:
this.getAttribute('style');
//do i use:
$(this).prop('style');
//or:
$(this).attr('style');
})
czy w tym przypadku robią to samo?
A jeśli ja nie muszę przełączyć się na używanie prop()
, wszystkie stare attr()
połączenia pęknie jeśli przełączyć do 1,6?
AKTUALIZACJA
selector = '#id'
$(selector).click(function() {
//instead of:
var getAtt = this.getAttribute('style');
//do i use:
var thisProp = $(this).prop('style');
//or:
var thisAttr = $(this).attr('style');
console.log(getAtt, thisProp, thisAttr);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<div id='id' style="color: red;background: orange;">test</div>
(zobacz także to skrzypce: http://jsfiddle.net/maniator/JpUF2/ )
Konsola rejestruje getAttribute
jako ciąg, a attr
jako ciąg, ale prop
jako CSSStyleDeclaration
, Dlaczego? Jak to wpływa na moje kodowanie w przyszłości?
Odpowiedzi:
Aktualizacja 1 listopada 2012 r
Moja oryginalna odpowiedź dotyczy konkretnie jQuery 1.6. Moja rada pozostaje ta sama, ale jQuery 1.6.1 zmieniło nieco rzeczy: w obliczu przewidywanego stosu uszkodzonych stron zespół jQuery powrócił
attr()
do czegoś zbliżonego (ale nie dokładnie takiego samego) do swojego starego zachowania dla atrybutów boolowskich . John Resig również pisał o tym na blogu . Widzę trudność, na jakiej się znajdowali, ale nadal nie zgadzam się z jego zaleceniem, by preferowaćattr()
.Oryginalna odpowiedź
Jeśli kiedykolwiek używałeś tylko jQuery, a nie DOM bezpośrednio, może to być myląca zmiana, chociaż zdecydowanie jest to poprawa koncepcyjna. Nie jest to jednak dobre dla bazillionów stron korzystających z jQuery, które zepsują się w wyniku tej zmiany.
Podsumuję główne problemy:
prop()
raczej niżattr()
.prop()
robi to , coattr()
kiedyś. Wymiana wywołańattr()
zeprop()
w kodzie generalnie będzie działał.checked
właściwość jest wartością logiczną,style
właściwość jest obiektem z indywidualnymi właściwościami dla każdego stylu,size
właściwość jest liczbą.value
ichecked
: dla tych atrybutów właściwość zawsze reprezentuje bieżący stan, podczas gdy atrybut (z wyjątkiem starych wersji IE) odpowiada domyślnej wartości / sprawdzeniu danych wejściowych (odzwierciedlonej we właściwościdefaultValue
/defaultChecked
).Jeśli jesteś programistą jQuery i cała Twoja firma jest zdezorientowana co do właściwości i atrybutów, musisz cofnąć się o kilka kroków i dowiedzieć się trochę na ten temat, ponieważ jQuery nie stara się już tak bardzo cię chronić przed takimi rzeczami. Autorytatywne , ale nieco suche słowo na ten temat, zawiera specyfikację: DOM4 , HTML DOM , DOM Poziom 2 , DOM Poziom 3 . Dokumentacja DOM Mozilli jest ważna dla większości współczesnych przeglądarek i jest łatwiejsza do odczytania niż specyfikacje, więc może okazać się pomocne odniesienie do niej . Istnieje sekcja dotycząca właściwości elementu .
Jako przykład prostszego w obsłudze właściwości niż atrybutów, rozważ pole wyboru, które jest początkowo zaznaczone. Oto dwa możliwe fragmenty prawidłowego kodu HTML:
Jak więc sprawdzić, czy pole wyboru jest zaznaczone za pomocą jQuery? Spójrz na Przepełnienie stosu, a zwykle znajdziesz następujące sugestie:
if ( $("#cb").attr("checked") === true ) {...}
if ( $("#cb").attr("checked") == "checked" ) {...}
if ( $("#cb").is(":checked") ) {...}
Jest to właściwie najprostsza rzecz na świecie
checked
związana z właściwością Boolean, która istnieje i działa bezbłędnie w każdej głównej przeglądarce skryptowej od 1995 roku:if (document.getElementById("cb").checked) {...}
Właściwość sprawia, że zaznaczanie lub odznaczanie pola wyboru jest banalne:
document.getElementById("cb").checked = false
W jQuery 1.6 staje się to jednoznacznie
$("#cb").prop("checked", false)
Pomysł użycia
checked
atrybutu do skryptowania pola wyboru jest nieprzydatny i niepotrzebny. Właściwość jest tym, czego potrzebujesz.checked
atrybutuźródło
value
przykład Tima . Wywołana funkcjaattr
pobierająca właściwośćvalue
zamiast atrybutu „wartość” nie ma większego sensu (i mogą być różne). W przyszłościattr
robienie atrybutów iprop
robienie właściwości będzie wyraźniejsze, choć dla niektórych przejście będzie bolesne. Nie bierz tego źle, nie ma nic lepszego niż cofnięcie się i przeczytanie specyfikacji, aby dowiedzieć się, jakie są właściwości.value
na przykład), ale spróbujmy to zignorować. W 99% przypadków chcesz pracować z rekwizytami. Jeśli musisz pracować z faktycznym atrybutem, prawdopodobnie to wiesz.value
właściwości danych wejściowych nie zmienia ichvalue
atrybutów we współczesnych przeglądarkach” Nie sądzę, że tak, dlatego zacząłem używać go jako przykładu, ale kiedy zacząłem kodować przykład, kochany jeśli nie został zaktualizowany w Chrome, Firefox, Opera, IE ... - jsbin.com/ahire4 Okazuje się, że to dlatego, że używałeminput[type="button"]
do mojego eksperymentu. To nie aktualizuje atrybutu nainput[type="text"]
- jsbin.com/ahire4/2 Dyskusja o zawiłe !! Nie tylko element, ale jego rodzaj ...Myślę, że Tim powiedział to całkiem dobrze , ale cofnijmy się:
Element DOM to obiekt, rzecz w pamięci. Podobnie jak większość obiektów w OOP, ma właściwości . Ma również osobno mapę atrybutów zdefiniowanych na elemencie (zwykle pochodzących ze znaczników czytanych przez przeglądarkę w celu utworzenia elementu). Niektóre właściwości elementu uzyskują swoje wartości początkowe z atrybutów o takich samych lub podobnych nazwach (
value
pobiera swoją wartość początkową z atrybutu „wartość”;href
pobiera swoją wartość początkową z atrybutu „href”, ale nie jest to dokładnie ta sama wartość;className
z atrybut „klasa”). Inne właściwości uzyskują swoje wartości początkowe na inne sposoby: Na przykładparentNode
właściwość uzyskuje swoją wartość na podstawie tego, czym jest jej element nadrzędny;style
właściwość, bez względu na to, czy ma atrybut „styl”, czy nie.Rozważmy tę kotwicę na stronie
http://example.com/testing.html
:Niektóre darmowe grafiki ASCII (i pomijając wiele rzeczy):
Pamiętaj, że właściwości i atrybuty są różne.
Teraz, mimo że są różne, ponieważ wszystko to ewoluowało, a nie było projektowane od podstaw, szereg właściwości odpisuje na atrybut, z którego pochodzą, jeśli je ustawisz. Ale nie wszyscy tak robią, a jak widać z
href
góry, mapowanie nie zawsze jest prostym „przekazaniem wartości”, czasem wiąże się to z interpretacją.Kiedy mówię o właściwościach będących właściwościami obiektu, nie mówię abstrakcyjnie. Oto kod inny niż jQuery:
(Wartości te są zgodne z większością przeglądarek; istnieje pewna odmiana).
link
Obiekt jest prawdziwa, można zobaczyć tam jest prawdziwa różnica pomiędzy dostępu do własności na niego i uzyskiwania dostępu do atrybutu .Jak powiedział Tim, przez większość czasu chcemy pracować z nieruchomościami. Częściowo dzieje się tak, ponieważ ich wartości (nawet nazwy) są bardziej spójne w różnych przeglądarkach. Przeważnie chcemy pracować z atrybutami tylko wtedy, gdy nie ma z nim powiązanej właściwości (atrybuty niestandardowe) lub gdy wiemy, że dla tego konkretnego atrybutu atrybut i właściwość nie mają wartości 1: 1 (jak w przypadku
href
„href” powyżej) .Standardowe właściwości są określone w różnych specyfikacjach DOM:
Te specyfikacje mają doskonałe indeksy i zalecamy trzymanie linków do nich pod ręką; Używam ich cały czas.
Niestandardowe atrybuty obejmowałyby na przykład wszelkie
data-xyz
atrybuty, które można umieścić na elementach w celu dostarczenia meta-danych do kodu (teraz jest to ważne od HTML5, o ile trzymasz siędata-
prefiksu). (Najnowsze wersje jQuery dają ci dostęp dodata-xyz
elementów za pośrednictwemdata
funkcji, ale ta funkcja nie jest tylko akcesorium dodata-xyz
atrybutów [robi to mniej więcej]; chyba że faktycznie potrzebujesz jej funkcji, użyłbym tejattr
funkcji do interakcji zdata-xyz
atrybutem).attr
Funkcja używana mieć jakieś zawiłe logiki wokół uzyskanie co myśleli chciałeś, zamiast dosłownie coraz atrybut. To połączyło koncepcje. Przeprowadzka doprop
iattr
miała na celu ich dezintegrację. Krótko v1.6.0 jQuery poszedł zbyt daleko w tym względzie, ale funkcjonalność dodano szybko z powrotem doattr
obsłużyć typowe sytuacje, w których ludzie używająattr
, gdy technicznie powinni używaćprop
.źródło
.attr('class', 'bla')
działa zgodnie z oczekiwaniami w wersjach 1.7.0 , 1.7.1 i 1.7.2 w Chrome 17, Firefox 11, Opera 11, IE6, IE8, IE9 i Safari 5..data
- odczyta domyślną wartość atrybutu, jeśli jest obecny, ale jeśli napiszesz do niego, zmieni ukrytą właściwość elementu i nie zaktualizuje atrybutu.Ta zmiana długo czekała na jQuery. Przez lata byli zadowoleni z funkcji o nazwie,
attr()
która w większości pobierała właściwości DOM, a nie wynik, którego można oczekiwać od nazwy. Segregacjaattr()
iprop()
powinna pomóc złagodzić pewne zamieszanie między atrybutami HTML a właściwościami DOM.$.fn.prop()
pobiera określoną właściwość DOM, a$.fn.attr()
pobiera określony atrybut HTML.Aby w pełni zrozumieć, jak działają, oto obszerne wyjaśnienie różnicy między atrybutami HTML a właściwościami DOM:
Atrybuty HTML
Składnia:
<body onload="foo()">
Cel: umożliwia znacznikom powiązanie z nimi danych na potrzeby zdarzeń, renderowania i innych celów.
Wizualizacja: Atrybut klasy jest pokazany tutaj na ciele. Jest dostępny poprzez następujący kod:
Atrybuty są zwracane w postaci ciągów i mogą być niespójne między przeglądarkami. Mogą być jednak niezbędne w niektórych sytuacjach. Jak pokazano powyżej, IE Quirks Mode (i poniżej) oczekuje nazwy właściwości DOM w get / set / removeAttribute zamiast nazwy atrybutu. Jest to jeden z wielu powodów, dla których ważna jest znajomość różnicy.
Właściwości DOM
Składnia:
document.body.onload = foo;
Cel: Daje dostęp do właściwości należących do węzłów elementu. Te właściwości są podobne do atrybutów, ale są dostępne tylko przez JavaScript. Jest to ważna różnica, która pomaga wyjaśnić rolę właściwości DOM. Należy pamiętać, że atrybuty różnią się całkowicie od właściwości , ponieważ to przypisanie procedury obsługi zdarzeń jest bezużyteczne i nie odbierze zdarzenia (ciało nie ma zdarzenia onload, tylko atrybut onload).
Wyobrażanie sobie:
Tutaj zobaczysz listę właściwości w zakładce „DOM” w Firebug. To są właściwości DOM. Od razu zauważysz sporo z nich, ponieważ używałeś ich wcześniej, nie wiedząc o tym. Ich wartości są tym, co otrzymasz za pośrednictwem JavaScript.
Dokumentacja
Przykład
HTML:
<textarea id="test" value="foo"></textarea>
JavaScript:
alert($('#test').attr('value'));
We wcześniejszych wersjach jQuery zwraca pusty ciąg. W pkt 1.6, zwraca właściwą wartość
foo
.Nie patrząc na nowy kod żadnej z funkcji, mogę z całą pewnością stwierdzić, że zamieszanie ma więcej wspólnego z różnicą między atrybutami HTML a właściwościami DOM, niż z samym kodem. Mam nadzieję, że to wyjaśniło ci kilka rzeczy.
-Matt
źródło
$.prop()
pobiera właściwości DOM,$.attr()
pobiera atrybuty HTML. Próbuję psychicznie wypełnić lukę, abyście mogli zrozumieć różnicę między nimi.$('#test').prop('value')
nic nie zwraca? Nie dotyczy.attr('checked')
też pola wyboru? Ale kiedyś tak było? Teraz musiałbyś to zmienićprop('checked')
? Nie rozumiem potrzeby takiego rozróżnienia - dlaczego ważne jest rozróżnienie atrybutów HTML i właściwości DOM? Jaki jest typowy przypadek użycia, który sprawił, że ta zmiana „nadchodzi długo” ? Co jest złego w wyodrębnianiu rozróżnienia między nimi dwoma, ponieważ wydaje się, że ich przypadki użycia w większości się pokrywają?value
jest jednym z najbardziej oczywistych przypadków, ponieważvalue
właściwość poda ci bieżącą wartość pola, alevalue
atrybut da ci oryginalną wartość zadeklarowaną wvalue="..."
atrybucie, która w rzeczywistości jestdefaultValue
właściwością. (Chociaż ten konkretny przypadek znów jest mylony przez błędy w IE <9.)attr('value', ...)
w jQuery <1.6 ustawia właściwość, więc bieżąca wartość się zmienia, a wartość domyślna nie. W 1.6 ustawia atrybut, więc teoretycznie wartość domyślna zmienia się, a wartość bieżąca nie. Istnieją jednak (więcej) niespójności przeglądarki dotyczące tego, co dokładnievalue
robi ustawienie tego atrybutu. W IE ustawia również bieżącą wartość; w niektórych przeglądarkach ustawia bieżącą wartość tylko wtedy, gdy bieżąca wartość nie była wcześniej ustawiana. [płacze]Właściwość znajduje się w DOM; atrybut znajduje się w HTML, który jest analizowany w DOM.
Dalsze szczegóły
Jeśli zmienisz atrybut, zmiana zostanie odzwierciedlona w DOM (czasem pod inną nazwą).
Przykład: zmiana
class
atrybutu znacznika spowoduje zmianęclassName
właściwości tego znacznika w DOM. Jeśli nie masz atrybutu w znaczniku, nadal masz odpowiednią właściwość DOM z pustą lub domyślną wartością.Przykład: Chociaż tag nie ma
class
atrybutu, właściwość DOMclassName
istnieje z pustą wartością ciągu.edytować
Jeśli zmienisz jedno, drugie zostanie zmienione przez kontroler i odwrotnie. Ten kontroler nie znajduje się w jQuery, ale w natywnym kodzie przeglądarki.
źródło
jQuery('p').prop('className', 'foo');
w konsoli Chrome, a zobaczysz, jak każdy akapit otrzymujeclass
atrybut thg'foo'
. Oczywiście nie ma go w kodzie źródłowym, który pochodzi z serwera. To jest stałe.To tylko rozróżnienie między atrybutami HTML a obiektami DOM powoduje zamieszanie. Dla tych, którzy czują się komfortowo, działając na elementach DOM właściwości natywne, takie jak
this.src
this.value
this.checked
itp,.prop
jest bardzo ciepłym przyjęciem dla rodziny. Dla innych jest to tylko dodatkowa warstwa zamieszania. Wyjaśnijmy to.Najłatwiejszym sposobem sprawdzenia różnicy między
.attr
i.prop
jest następujący przykład:$('input').attr('blah')
: zwraca'hello'
zgodnie z oczekiwaniami. Tu nie ma niespodzianek.$('input').prop('blah')
: zwracaundefined
- ponieważ próbuje to zrobić[HTMLInputElement].blah
- i nie istnieje taka właściwość dla tego obiektu DOM. Istnieje tylko w zakresie jako atrybut tego elementu, tj[HTMLInputElement].getAttribute('blah')
Teraz zmieniamy kilka takich rzeczy:
$('input').attr('blah')
: zwraca'apple'
eh? Dlaczego nie „gruszka”, ponieważ ustawiono ją ostatnio na tym elemencie. Ponieważ właściwość została zmieniona na atrybucie wejściowym, a nie na samym elemencie wejściowym DOM - w zasadzie działają prawie niezależnie od siebie.$('input').prop('blah')
: zwroty'pear'
Rzeczy, na które naprawdę musisz uważać, to po prostu nie mieszaj ich użycia dla tej samej właściwości w całej aplikacji z powyższego powodu.
Zobacz skrzypce demonstrujące różnicę: http://jsfiddle.net/garreh/uLQXc/
.attr
vs.prop
:Runda 1: styl
.attr('style')
- zwraca style wbudowane dla dopasowanego elementu tj"font:arial;"
.prop('style')
- zwraca obiekt deklaracji stylu tjCSSStyleDeclaration
Runda 2: wartość
.attr('value')
- zwraca'hello'
*.prop('value')
-- zwroty'i changed the value'
* Uwaga: jQuery z tego powodu ma
.val()
metodę, która wewnętrznie jest równoważna.prop('value')
źródło
TL; DR
Użyj
prop()
ciąguattr()
w większości przypadków.Nieruchomość jest obecny stan elementu wejściowego. Atrybut jest wartością domyślną.
Właściwość może zawierać rzeczy różnych typów. Atrybut może zawierać tylko ciągi znaków
źródło
prop() and when to go for attr()
. czekam na odpowiedź :)Brudna kratka
Ta koncepcja stanowi przykład, w którym można zaobserwować różnicę: http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty
Wypróbuj to:
prop
wyboru. HUK!Na niektóre atrybuty jak
disabled
nabutton
dodanie lub usunięcie atrybutu contentdisabled="disabled"
zawsze przełącza własność (tzw atrybut IDL w HTML5), ponieważ http://www.w3.org/TR/html5/forms.html#attr-fe-disabled mówi:więc możesz sobie z tym poradzić, chociaż jest brzydka, ponieważ modyfikuje HTML bez potrzeby.
W przypadku innych atrybutów, takich jak
checked="checked"
oninput type="checkbox"
, rzeczy się psują, ponieważ po kliknięciu stają się one brudne, a następnie dodanie lub usunięciechecked="checked"
atrybutu content nie przełącza już sprawdzania .Dlatego powinieneś używać głównie
.prop
, ponieważ wpływa to bezpośrednio na efektywną właściwość, zamiast polegać na złożonych skutkach ubocznych modyfikacji HTML.źródło
checked
checked="checked"
Wszystko jest w dokumencie :
Więc użyj prop!
źródło
$.attr()
pobieranie właściwości przez większość czasu z nim pracowałem, a nie „czasami”. Powstałe z tego powodu zamieszanie jest nadal rezonansowe. Niestety mam problem ze znalezieniem ostatecznego odczytania atrybutów HTML vs. właściwości DOM, więc mogę tu napisać odpowiedź.atrybuty znajdują się w dokumencie / pliku tekstowym HTML (== wyobraź sobie, że jest to wynik analizowanego znacznika HTML), podczas gdy
właściwości są w drzewie DOM HTML (== w zasadzie faktyczna właściwość jakiegoś obiektu w sensie JS).
Co ważne, wiele z nich jest zsynchronizowanych (jeśli zaktualizujesz
class
właściwość,class
atrybut w HTML również zostanie zaktualizowany; w przeciwnym razie). Ale niektóre atrybuty mogą być zsynchronizowane z nieoczekiwanymi właściwościami - np. Atrybutchecked
odpowiada właściwościdefaultChecked
, więc.prop('checked')
wartość, ale nie zmieni.attr('checked')
i.prop('defaultChecked')
wartości$('#input').prop('defaultChecked', true)
również się zmieni.attr('checked')
, ale nie będzie to widoczne na elemencie.A oto tabela, która pokazuje, gdzie
.prop()
jest preferowana (mimo że.attr()
nadal może być używana).Dlaczego czasami miałbyś chcieć używać .prop () zamiast .attr (), gdy jest to oficjalnie zalecane?
.prop()
może zwrócić dowolny typ - ciąg znaków, liczbę całkowitą, wartość logiczną; podczas gdy.attr()
zawsze zwraca ciąg..prop()
mówi się, że jest około 2,5 razy szybszy niż.attr()
.źródło
$('#myImageId').prop('src', 'http://example.com/img.png')
,var class = $('.myDivClass').prop('class')
, lub$('#myTextBox').prop('type', 'button')
. I tak dalej ....prop()
działa dobrze ze wszystkimi właściwościami. Nie chcesz zaznaczyć wszystkich właściwości w.prop()
kolumnie, prawda?.prop()
jest preferowane (choć.attr()
nadal można go używać)”.attr()
do zdefiniowania zdarzenia, które.prop()
nie może. Tak:$('.myDiv').attr('onclick', 'alert("Hello world!")')
. Jeśli zmienisz.attr()
na.prop()
, to nie będzie działać. Uważam, że nie ma powodu, aby używać.attr()
lub ustawiać wartośćid/class/href/checked/src.....
. Zauważ, że nie mówię, że się mylisz..attr()
:.prop()
:źródło
Zwykle będziesz chciał użyć właściwości. Użyj atrybutów tylko dla:
<input value="abc">.
źródło
attributes
-> HTMLproperties
-> DOMźródło
attirbutes
również jedna z własnościDOM
Przed wersją jQuery 1.6
attr()
metoda czasami uwzględniała wartości właściwości przy pobieraniu atrybutów, co powodowało dość niespójne zachowanie.Wprowadzenie
prop()
metody umożliwia jawne pobieranie wartości właściwości podczas.attr()
pobierania atrybutów.Dokumenty:
jQuery.attr()
Uzyskaj wartość atrybutu dla pierwszego elementu w zestawie dopasowanych elementów.jQuery.prop()
Uzyskaj wartość właściwości pierwszego elementu w zestawie pasujących elementów.źródło
Delikatnie przypomnij o użyciu
prop()
, na przykład:Powyższa funkcja służy do sprawdzania, czy pole wyboru 1 jest zaznaczone, czy nie, jeśli zaznaczone: return 1; jeśli nie: zwraca 0. Funkcja prop () użyta tutaj jako funkcja GET.
Powyższa funkcja służy do ustawienia pola wyboru 1 do sprawdzenia i ZAWSZE zwraca 1. Teraz funkcja prop () jest używana jako funkcja SET.
Nie zadzieraj.
P / S: Kiedy sprawdzam właściwość Image src . Jeśli src jest pusty, prop zwróć bieżący adres URL strony (nieprawidłowy), a attr zwróć pusty ciąg (prawy).
źródło
<img src="smiley.gif" alt="Smiley face" width="42" height="42" onclick="alert($(this).prop('src'))">
. Powinien działać i zwrócić lokalizację obrazu.Jedno
.attr()
może zrobić,.prop()
czego nie można: wpłynąć na selektory CSSOto problem, którego nie widziałem w innych odpowiedziach.
Selektor CSS
[name=value]
.attr('name', 'value')
.prop('name', 'value')
.prop()
wpływa tylko na kilka selektorów atrybutówinput[name]
(dzięki @TimDown ).attr()
wpływa na wszystkie selektory atrybutówinput[value]
input[naame]
span[name]
input[data-custom-attribute]
(żadne nie.data('custom-attribute')
wpłynie na ten selektor)źródło
Głównie chcemy użyć dla obiektu DOM, a nie niestandardowego atrybutu, takiego jak
data-img, data-xyz
.Również niektóre różnice podczas uzyskiwania dostępu do
checkbox
wartości orazhref
zattr()
iprop()
jako rzecz zmieniają się z wyjściem DOM zprop()
pełnym linkiemorigin
iBoolean
wartością pola wyboru(pre-1.6)
Możemy uzyskać dostęp do elementów DOM tylko z
prop
innymi, niż to dajeundefined
Pokaż fragment kodu
źródło
Istnieje kilka innych uwag w prop () vs attr ():
selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked i defaultSelected..etc należy pobrać i ustawić za pomocą metody .prop (). Nie mają one odpowiednich atrybutów i są jedynie właściwościami.
Pole wyboru typu danych wejściowych
metoda prop zwraca wartość logiczną dla zaznaczonego, wybranego, wyłączonego, readOnly..etc, natomiast attr zwraca zdefiniowany ciąg. Możesz więc bezpośrednio użyć .prop („zaznaczone”) w warunku if.
.attr () wywołuje wewnętrznie .prop (), więc metoda .attr () będzie nieco wolniejsza niż bezpośredni dostęp do nich poprzez .prop ().
źródło
Odpowiedź Gary'ego Hole'a jest bardzo istotna dla rozwiązania problemu, jeśli kod jest napisany w taki sposób
Ponieważ obiekt prop zwraca
CSSStyleDeclaration
obiekt, powyższy kod nie będzie działał poprawnie w niektórych przeglądarkach (testowane zIE8 with Chrome Frame Plugin
w moim przypadku ).W ten sposób zmieniamy go w następujący kod
Rozwiązać problem.
źródło