.prop () vs. attr()
Więc 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?
I jeśli będę musiał przełączyć się na using prop()
, wszystkie stare połączenia attr()
ulegną awarii, jeśli przełączę się na 1.6?
UPDATE
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 też: http://jsfiddle.net/maniator/JpUF2/)
Konsola zapisuje {[6] } jako ciąg znaków, a attr
jako ciąg znaków, ale prop
jako CSSStyleDeclaration
, dlaczego? Jak to wpłynie na moje kodowanie w przyszłości?
18 answers
Aktualizacja 1 Listopada 2012
Moja oryginalna odpowiedź dotyczy konkretnie jQuery 1.6. Moja rada pozostaje taka sama, ale jQuery 1.6.1 zmienił nieco rzeczy: w obliczu przewidywanego stosu zepsutych stron internetowych, zespół jQuery powrócił attr()
do czegoś bliskiego (ale nie dokładnie tego samego, co) jego stare zachowanie dla atrybutów logicznych . John Resig również blogował o tym . Widzę, że byli w trudnościach, ale nadal nie zgadzają się z jego rekomendacją. preferować attr()
.
Oryginalna odpowiedź
Jeśli kiedykolwiek używałeś tylko jQuery, a nie bezpośrednio DOM, może to być myląca zmiana, chociaż jest to zdecydowanie poprawa koncepcyjnie. Nie tak dobrze dla bazylionów witryn korzystających z jQuery, które pękną w wyniku tej zmiany.
Podsumuję główne zagadnienia:
- zazwyczaj chcesz
prop()
zamiastattr()
. - w większości przypadków,
prop()
robi to, coattr()
zrób. Zamiana wywołań naattr()
naprop()
w kodzie będzie ogólnie działać. - właściwości są na ogół prostsze w obsłudze niż atrybuty. Wartość atrybutu może być tylko ciągiem znaków, podczas gdy właściwość może być dowolnego typu. Na przykład właściwość
checked
jest wartością logiczną, właściwośćstyle
jest obiektem z indywidualnymi właściwościami dla każdego stylu, właściwośćsize
jest liczbą. - jeśli istnieje zarówno właściwość, jak i atrybut o tej samej nazwie, Zwykle aktualizacja jednego z nich zaktualizuje inne, ale tak nie jest w przypadku niektórych atrybutów wejść, takich jak
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 / sprawdzalności wejścia (odzwierciedlonej wdefaultValue
/defaultChecked
nieruchomości). - ta zmiana usuwa część warstwy magicznego jQuery utkniętej przed atrybutami i właściwościami, co oznacza, że programiści jQuery będą musieli dowiedzieć się trochę o różnica między właściwościami i atrybutami. To dobra rzecz.
Jeśli jesteś programistą jQuery i jesteś zdezorientowany przez ten cały biznes o właściwościach i atrybutach, musisz zrobić krok w tył i dowiedzieć się trochę o tym, ponieważ jQuery nie stara się już tak mocno chronić Cię przed tymi rzeczami. Dla autorytatywnego, ale nieco suchego słowa na ten temat, jest specyfikacja: DOM4, HTML DOM, poziom DOM 2, DOM Level 3 . Mozilla ' s Dokumentacja DOM jest ważna dla większości nowoczesnych przeglądarek i jest łatwiejsza do odczytania niż specyfikacje, więc może okazać się pomocna dla odniesienie do DOM. Istnieje sekcja dotycząca właściwości elementu .
Jako przykład tego, jak właściwości są prostsze w obsłudze niż atrybuty, rozważ pole wyboru, które jest wstępnie zaznaczone. Oto dwa możliwe fragmenty poprawnego HTML, aby to zrobić:
<input id="cb" type="checkbox" checked>
<input id="cb" type="checkbox" checked="checked">
Więc, jak sprawdzić, czy pole wyboru jest zaznaczone w jQuery? # Patrz przepełnienie stosu i często znajdziesz następujące sugestie:
if ( $("#cb").attr("checked") === true ) {...}
if ( $("#cb").attr("checked") == "checked" ) {...}
if ( $("#cb").is(":checked") ) {...}
if (document.getElementById("cb").checked) {...}
Właściwość sprawia, że sprawdzenie lub odznaczenie checkboxa jest trywialne:
document.getElementById("cb").checked = false
W jQuery 1.6, to jednoznacznie staje się
$("#cb").prop("checked", false)
Pomysł użycia atrybutu checked
do skryptowania pola wyboru jest nieprzydatny i niepotrzebny. Nieruchomość jest tym, czego potrzebujesz.
- nie jest oczywiste, jaki jest prawidłowy sposób zaznaczania lub odznaczania pola za pomocą atrybutu
checked
- wartość atrybutu odzwierciedla wartość domyślną, a nie aktualny stan widoczny (z wyjątkiem niektórych starszych wersji IE, co jeszcze utrudnia działanie). Atrybut nie mówi nic o tym, czy pole wyboru na stronie jest zaznaczone. Zobacz http://jsfiddle.net/VktA6/49/.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 13:43:57
Myślę, że Tim powiedział to całkiem dobrze , ale cofnijmy się:
Element DOM jest obiektem, rzeczą w pamięci. Podobnie jak większość obiektów w OOP, posiada właściwości . Ponadto, oddzielnie, posiada mapę atrybutów zdefiniowanych na elemencie (Zwykle pochodzącą ze znaczników, które przeglądarka odczytała, aby utworzyć element). Niektóre z właściwości pobierają swoje początkowe wartości z atrybutów o tych samych lub podobnych nazwach (value
otrzymuje swoje wartość początkowa z atrybutu "value"; href
pobiera wartość początkową z atrybutu "href", ale nie jest to dokładnie ta sama wartość; {[5] } z atrybutu "class"). Inne właściwości otrzymują swoje początkowe wartości w inny sposób: na przykład właściwość parentNode
otrzymuje swoją wartość na podstawie tego, czym jest jej element nadrzędny; element zawsze ma właściwość style
, niezależnie od tego, czy ma atrybut "style", czy nie.
Rozważmy tę kotwicę na stronie w http://example.com/testing.html
:
<a href='foo.html' class='test one' name='fooAnchor' id='fooAnchor'>Hi</a>
Niektóre darmowe ASCII Sztuka (i pomijając wiele rzeczy):
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ | HTMLAnchorElement | +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ | href: "http://example.com/foo.html" | | name: "fooAnchor" | | id: "fooAnchor" | | className: "test one" | | attributes: | | href: "foo.html" | | name: "fooAnchor" | | id: "fooAnchor" | | class: "test one" | +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
Zauważ, że właściwości i atrybuty są różne.
Teraz, chociaż są one różne, ponieważ wszystkie te ewoluowały, a nie były projektowane od podstaw, wiele właściwości odpisuje do atrybutu, z którego pochodzą, jeśli je ustawisz. Ale nie wszyscy tak robią i jak widać z href
powyżej, mapowanie nie zawsze jest prostą "przekaż wartość", czasami wymagana jest interpretacja.
Kiedy mówię o właściwościach będących właściwościami obiektu, nie mówię abstrakcyjnie. Oto jakiś kod nie-jQuery:
var link = document.getElementById('fooAnchor');
alert(link.href); // alerts "http://example.com/foo.html"
alert(link.getAttribute("href")); // alerts "foo.html"
(te wartości są zgodne z większością przeglądarek; istnieje pewna zmienność.)
Obiekt link
jest rzeczywistością i widać, że istnieje prawdziwa różnica między uzyskaniem dostępu do właściwości na nim, a uzyskaniem dostępu do atrybutu.
Jak powiedział Tim, zdecydowana większość czasu, chcemy pracować z właściwościami. Częściowo dzieje się tak, ponieważ ich wartości (nawet nazwy) są bardziej spójne w różnych przeglądarkach. Najczęściej chcemy pracować z atrybutami tylko wtedy, gdy nie ma właściwości z nią związanej (niestandardowe atrybuty), lub gdy wiemy, że dla tego konkretnego atrybutu, atrybut i właściwość nie są 1: 1 (Jak w href
i "href" powyżej).
Standardowe właściwości są określone w różnych specyfikacjach DOM:
- DOM2 HTML (w większości przestarzałe, zobacz HTML spec zamiast)
- rdzeń DOM2 (przestarzałe)
- DOM3 Core (przestarzałe)
- DOM4
Te specyfikacje mają doskonałe indeksy i zalecam trzymanie linków do nich pod ręką; używam ich cały czas.
Atrybuty niestandardowe obejmują na przykład atrybuty data-xyz
, które możesz umieścić na elementach, aby dostarczyć metadane do kodu (teraz, gdy jest to ważne od HTML5, o ile trzymasz się data-
prefiks). (Najnowsze wersje jQuery dają dostęp do elementów data-xyz
za pomocą funkcji data
, ale ta funkcja jest , a nie tylko accessorem dla atrybutów data-xyz
[robi to zarówno więcej, jak i mniej]; jeśli nie potrzebujesz jej funkcji, użyłbym funkcji attr
do interakcji z atrybutem data-xyz
.)
Funkcja attr
kiedyś miała zawiłą logikę wokół uzyskania tego, co myśleli, że chcesz, zamiast dosłownie uzyskać atrybut. Połączyło koncepcje. Przeniesienie do prop
i attr
miało na celu ich oddzielić. Krótko w wersji 1.6.0 jQuery poszło za daleko pod tym względem, ale funkcjonalność została szybko dodana z powrotem do attr
, aby poradzić sobie z typowymi sytuacjami, w których ludzie używają attr
, kiedy technicznie powinni używać prop
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:44
Ta zmiana już dawno nadchodziła dla jQuery. Od lat są zadowoleni z funkcji o nazwie attr()
, która najczęściej pobiera właściwości DOM, a nie wynik, którego można oczekiwać od nazwy. Segregacja attr()
oraz prop()
powinno pomóc złagodzić pewne nieporozumienia między atrybutami HTML i właściwościami DOM. $.fn.prop()
chwyta określoną właściwość DOM, podczas gdy $.fn.attr()
chwyta określony atrybut HTML.
Aby w pełni zrozumieć, jak działają, oto rozszerzone wyjaśnienie różnicy między atrybutami HTML a właściwościami DOM.:
Atrybuty HTML
Składnia:
<body onload="foo()">
Cel: Umożliwia przypisanie do znaczników danych do zdarzeń, renderowania i innych celów.
Wizualizacja: Atrybut klasy jest pokazany tutaj na ciele. Jest dostępny za pomocą następującego kodu:
var attr;
attr = document.body.getAttribute("class");
//IE 8 Quirks and below
attr = document.body.getAttribute("className");
Atrybuty są zwracane w postaci ciągu znaków i mogą być niespójne z przeglądarki do przeglądarki. Jednak w niektórych sytuacjach mogą być istotne. Jak pokazano powyżej, IE 8 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żne jest, aby znać różnicę.
Właściwości DOM
Składnia:
document.body.onload = foo;
Cel: Daje dostęp do właściwości, które należą do węzłów elementu. Właściwości te 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. proszę zauważyć, że atrybuty są zupełnie inne niż właściwości , ponieważ to przypisanie obsługi zdarzenia jest bezużyteczne i nie otrzyma zdarzenia (ciało nie ma zdarzenia onload, tylko atrybut onload).
Wizualizacja:
Tutaj zobaczysz listę właściwości w zakładce" DOM " w Firebug. To są Nieruchomości DOM. Będziesz natychmiast zauważcie sporo z nich, ponieważ użyliście ich wcześniej, nie wiedząc o tym. Ich wartości są tym, co otrzymasz za pośrednictwem JavaScript.
Dokumentacja
- JavaScript: the Definitive Guide by David Flanagan
- atrybuty HTML, Mozilla Dev Center
- Dom element Właściwości, Mozilla Dev Center
Przykład
HTML: <textarea id="test" value="foo"></textarea>
JavaScript: alert($('#test').attr('value'));
Wcześniej wersji jQuery, zwraca pusty ciąg znaków. W 1.6 zwraca właściwą wartość foo
.
Bez spojrzenia na nowy kod dla którejkolwiek z funkcji, mogę z pewnością powiedzieć, że zamieszanie ma więcej wspólnego z różnicą między atrybutami HTML i właściwościami DOM, niż z samym kodem. Mam nadzieję, że to wyjaśniło ci pewne rzeczy.
- Matt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 21:41:31
Właściwość jest w DOM; atrybut jest w HTML, który jest parsowany do DOM.
Dalsze szczegóły
Jeśli zmienisz atrybut, zmiana zostanie odzwierciedlona w DOM (czasami z inną nazwą).
Przykład: zmiana atrybutu class
znacznika spowoduje zmianę właściwości className
tego znacznika w DOM.
Jeśli nie masz atrybutu na znaczniku, nadal masz odpowiednią właściwość DOM z pustą lub domyślną wartością.
Przykład: While Twój tag nie posiada atrybutu class
, właściwość DOM className
Istnieje z pustą wartością łańcuchową.
Edit
Jeśli zmienisz jeden, drugi zostanie zmieniony przez kontroler i vice versa. Ten kontroler nie jest w jQuery, ale w natywnym kodzie przeglądarki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 07:09:15
Rozróżnienie między atrybutami HTML i obiektami DOM powoduje zamieszanie. Dla tych, którzy są komfortowe działając na elementy Dom natywne właściwości takie this.src
this.value
this.checked
etc, .prop
to bardzo ciepłe powitanie w rodzinie. Dla innych jest to tylko dodatkowa warstwa zamieszania. Wyjaśnijmy to sobie.
Najprostszym sposobem, aby zobaczyć różnicę między .attr
i .prop
jest następujący przykład:
<input blah="hello">
-
$('input').attr('blah')
: zwraca'hello'
zgodnie z oczekiwaniami. Żadnych niespodzianek. -
$('input').prop('blah')
: zwracaundefined
-- ponieważ próbuje wykonać[HTMLInputElement].blah
-- i żadna taka właściwość na tym obiekcie DOM nie istnieje. Istnieje tylko w zakresie jako atrybut tego elementu, tj.[HTMLInputElement].getAttribute('blah')
Teraz zmieniamy kilka rzeczy w ten sposób:
$('input').attr('blah', 'apple');
$('input').prop('blah', 'pear');
-
$('input').attr('blah')
: returns'apple'
eh? Dlaczego nie "gruszka", bo to było ustawione na końcu tego elementu. Ponieważ właściwość została zmieniona na atrybucie wejściowym, a nie na samym elemencie wejściowym DOM -- one zasadniczo prawie działają niezależnie od siebie. -
$('input').prop('blah')
: returns'pear'
Rzecz, z którą naprawdę musisz być ostrożny, to po prostu nie mieszaj ich użycia dla tej samej właściwości w całej aplikacji Z powyższego powodu.
Zobacz skrzypek demonstrujący różnicę: http://jsfiddle.net/garreh/uLQXc/
.attr
vs .prop
:
Runda 1: styl
<input style="font:arial;"/>
-
.attr('style')
-- zwraca style inline dla dopasowanego elementu, tzn."font:arial;"
-
.prop('style')
-- zwraca obiekt deklaracji stylu, tzn.CSSStyleDeclaration
Runda 2: Wartość
<input value="hello" type="text"/>
$('input').prop('value', 'i changed the value');
-
.attr('value')
-- zwraca'hello'
* -
.prop('value')
-- zwraca'i changed the value'
* Uwaga: jQuery z tego powodu ma metodę .val()
, która wewnętrznie jest równoważna .prop('value')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-19 14:19:03
TL; DR
Użyj prop()
nad attr()
w większości przypadków.
A właściwość jest bieżącym stanem elementu wejściowego. Atrybut jest wartością domyślną.
Właściwość może zawierać rzeczy różnego typu. Atrybut może zawierać tylko ciągi znaków
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-09 16:21:13
Dirty check
Pojęcie to stanowi przykład, w którym różnica jest obserwowalna: http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty
Wypróbuj:
- kliknij przycisk. Oba pola zostały sprawdzone.
- odznacz oba pola.
- kliknij przycisk ponownie. Tylko pole
prop
zostało zaznaczone. BANG!
$('button').on('click', function() {
$('#attr').attr('checked', 'checked')
$('#prop').prop('checked', true)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>attr <input id="attr" type="checkbox"></label>
<label>prop <input id="prop" type="checkbox"></label>
<button type="button">Set checked attr and prop.</button>
Dla niektórych atrybutów jak disabled
na button
, dodanie lub usunięcie atrybutu content {[5] } zawsze włącza właściwość (zwaną atrybutem IDL w HTML5), ponieważ http://www.w3.org/TR/html5/forms.html#attr-fe-disabled says:
Atrybut disabled IDL musi odzwierciedlać atrybut disabled content.
Więc może ujdzie ci to na sucho, chociaż jest brzydkie, ponieważ modyfikuje HTML bez potrzeby.
Dla innych atrybutów, takich jak checked="checked"
na input type="checkbox"
, rzeczy się psują, ponieważ po kliknięciu na nie, to staje się brudny, a następnie dodanie lub usunięcie atrybutu checked="checked"
content nie włącza już sprawdzania.
Dlatego powinieneś używać głównie .prop
, ponieważ wpływa to bezpośrednio na właściwość effective, zamiast polegać na złożonych efektach ubocznych modyfikacji HTML.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 16:11:25
Wszystko jest w doc:
Różnica między atrybutami i właściwościami może być ważna w określonych sytuacjach. Przed jQuery 1.6,metoda attr () czasami bierze pod uwagę wartości właściwości podczas pobierania niektórych atrybutów, co może powodować niespójne zachowanie. Od jQuery 1.6,metoda prop() zapewnia sposób jawnego pobierania wartości właściwości while .attr() pobiera tylko atrybuty.
Więc użyj prop !
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-03 19:35:47
Atrybuty znajdują się w dokumencie HTML / pliku tekstowym (==wyobraź sobie, że jest to wynik analizy znaczników html), podczas gdy
właściwości są w HTML drzewo DOM (==zasadniczo rzeczywistą właściwością jakiegoś obiektu w sensie JS).
Co ważne, wiele z nich jest zsynchronizowanych (jeśli zaktualizujesz Właściwość class
, atrybut class
w html również zostanie zaktualizowany; i w innych przypadkach). Ale niektóre atrybuty mogą być zsynchronizowane z nieoczekiwanymi właściwościami-np., atrybut checked
odpowiada właściwość defaultChecked
, tak, że
- ręczne zaznaczenie pola wyboru zmieni wartość
.prop('checked')
, ale nie zmieni wartości.attr('checked')
i.prop('defaultChecked')
- ustawienie
$('#input').prop('defaultChecked', true)
również zmieni.attr('checked')
, ale nie będzie to widoczne na elemencie.
Zasada jest:
.prop()
metoda powinna być używana dla boolowskich atrybutów/właściwości oraz dla właściwości, które nie istnieją w html (takie jak okno.miejsce). Wszystkie inne atrybuty (te, które można zobaczyć w html) może i powinien być nadal manipulowany za pomocą.attr()
metoda. ( http://blog.jquery.com/2011/05/10/jquery-1-6-1-rc-1-released/)
I oto tabela, która pokazuje, gdzie .prop()
jest preferowana (mimo że .attr()
może być nadal używana).
Dlaczego czasami chcesz użyć .prop() zamiast .attr ()
-
.prop()
może zwrócić dowolny typ - string, integer, boolean; while.attr()
zawsze zwraca łańcuch. -
.prop()
mówi się, że jest około 2,5 razy szybszy niż.attr()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 07:09:35
.attr()
:
- uzyskaj wartość atrybutu dla pierwszego elementu w zestawie dopasowanych elementów.
- daje wartość elementu, jak została zdefiniowana w html podczas ładowania strony
.prop()
:
- uzyskaj wartość właściwości dla pierwszego elementu w zbiorze dopasowanych elementów.
- podaje zaktualizowane wartości elementów, które są modyfikowane za pomocą javascript / jquery
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 12:18:20
Zazwyczaj będziesz chciał użyć właściwości. Użyj atrybutów tylko dla:
- uzyskanie niestandardowego atrybutu HTML (ponieważ nie jest on zsynchronizowany z właściwością DOM).
- uzyskanie atrybutu HTML, który nie jest zsynchronizowany z właściwością DOM, np. uzyskanie "oryginalnej wartości" standardowego atrybutu HTML, np.
<input value="abc">.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-02 20:36:51
attributes
-> HTML
properties
-> DOM
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-26 13:28:55
Przed jQuery 1.6 metoda attr()
czasami biorąc pod uwagę wartości właściwości podczas pobierania atrybutów, spowodowało to raczej niespójne zachowanie.
Wprowadzenie metody prop()
zapewnia sposób jawnego pobierania wartości właściwości, podczas gdy .attr()
pobiera atrybuty.
Docs:
jQuery.attr()
Pobiera wartość atrybutu dla pierwszego elementu w zestawie dopasowanych elementów.
jQuery.prop()
Get the value of a property for the pierwszy element w zestawie dopasowanych elementów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 12:38:36
Delikatnie przypomnij o użyciu prop()
, przykład:
if ($("#checkbox1").prop('checked')) {
isDelete = 1;
} else {
isDelete = 0;
}
Powyższa funkcja służy do sprawdzenia, czy checkbox1 jest zaznaczone, jeśli jest zaznaczone: return 1; jeśli nie: return 0. Funkcja prop () używana tutaj jako funkcja GET.
if ($("#checkbox1").prop('checked', true)) {
isDelete = 1;
} else {
isDelete = 0;
}
Powyższa funkcja służy do Ustawienia checkbox1 jako checked i zawsze zwraca 1. Teraz funkcja prop () używana jako funkcja SET.
Nie Nawal.
P / S: kiedy sprawdzam Obraz src własność. Jeśli src jest pusty, prop zwraca bieżący adres URL strony (źle), a attr zwraca pusty łańcuch (po prawej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 21:43:17
1) właściwość jest w DOM; atrybut jest w HTML, który jest parsed into the DOM.
2) $( elem ).attr ("checked") (1.6.1+)" checked " (String) Will Zmień za pomocą stanu checkbox
3) $ (elem).attr ("checked") (pre-1.6) True (Boolean) Changed ze stanem checkbox
Głównie chcemy używać dla obiektu DOM a nie niestandardowego atrybutu jak
data-img, data-xyz
.Również niektóre różnice przy dostępie
checkbox
wartość ihref
zattr()
iprop()
jako zmiana rzeczy z wyjściem DOM zprop()
jako pełny link zorigin
iBoolean
wartość dla checkboxa(pre-1.6)
Możemy uzyskać dostęp tylko do elementów DOM z
prop
inne wtedy dajeundefined
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>prop demo</title>
<style>
p {
margin: 20px 0 0;
}
b {
color: blue;
}
</style>
</head>
<body>
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
<script>
$("input").change(function() {
var $input = $(this);
$("p").html(
".attr( \"checked\" ): <b>" + $input.attr("checked") + "</b><br>" +
".prop( \"checked\" ): <b>" + $input.prop("checked") + "</b><br>" +
".is( \":checked\" ): <b>" + $input.is(":checked")) + "</b>";
}).change();
</script>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 09:28:27
.prop()
.prop( propertyName ) propertyName Type: String The name of the property to get.
The .metoda prop() pobiera wartość właściwości tylko dla pierwszego elementu w dopasowanym zestawie. Zwraca undefined dla wartości właściwości który nie został ustawiony lub jeśli dopasowany zestaw nie zawiera elementów. Aby uzyskać wartości dla każdego elementu indywidualnie, użyj pętli takiej jako jQuery .each () lub .metoda map ().
<html>
<head>
<meta charset="utf-8">
<title>prop demo</title>
<style>
p {
margin: 20px 0 0;
}
b {
color: blue;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
<script>
$( "input" ).change(function() {
var $input = $( this );
$( "p" ).html(
".attr( \"checked\" ): <b>" + $input.attr( "checked" ) + "</b><br>" +
".prop( \"checked\" ): <b>" + $input.prop( "checked" ) + "</b><br>" +
".is( \":checked\" ): <b>" + $input.is( ":checked" ) + "</b>" );
}).change();
</script>
</body>
</html>
.attr()
.attr( attributeName ) attributeName Type: String The name of the attribute to get.
The .metoda attr() pobiera wartość atrybutu tylko dla pierwszego elementu w dopasowanym zestawie. Aby uzyskać wartość dla każdego elementu indywidualnie, użyj konstrukcji pętli, takiej jak jQuery .each () lub .metoda map ().
Używanie jQuery ' s .metoda attr () do uzyskania wartości elementu atrybut ma dwie główne zalety:
Wygoda: może być wywołana bezpośrednio na obiekcie jQuery i przykuta do innych metod jQuery. Spójność między przeglądarkami: wartości niektórych atrybuty są zgłaszane niezgodnie w różnych przeglądarkach, a parzyste w różnych wersjach jednej przeglądarki. The .metoda attr () redukuje takie niespójności.
<html>
<head>
<meta charset="utf-8">
<title>attr demo</title>
<style>
em {
color: blue;
font-weight: bold;
}
div {
color: red;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>Once there was a <em title="huge, gigantic">large</em> dinosaur...</p>
The title of the emphasis is:<div></div>
<script>
var title = $( "em" ).attr( "title" );
$( "div" ).text( title );
</script>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-27 05:02:57
JQuery 1.6 wprowadza .funkcja prop() i oddziela atrybuty i właściwości DOM, wywołała wiele pytań dotyczących różnicy między nimi .attr i .funkcje rekwizytów.
Zobacz poniższe przykłady:
Przykład:1)
<input id="demo" type="text" dbvalue="Kansagara" />
$("#demo").attr("dbvalue"); // returns Kansagara
$("#demo").prop("dbvalue"); // returns undefined
.prop () Zwraca wartość tylko atrybutu HTML DOM, nie zwraca wartości niestandardowego atrybutu while .attr () zwraca również niestandardową wartość atrybutu pokazaną powyżej.
Przykład:2)
<input id="demo" type="text" value="Kansagara" />
Teraz zmieniłem tekst 'Kansagara' na 'Hitesh' w textbox.
$("#demo").attr("value"); // returns Kansagara
$("#demo").prop("value"); // returns Hitesh
Teraz już wiesz, co to znaczy. Zmieniana jest tylko właściwość elementu, ponieważ znajduje się w DOM i dynamic. Ale atrybut elementu jest w tekście HTML i nie można go zmienić. W szerokim znaczeniu właściwość zawsze reprezentuje aktualny stan, podczas gdy atrybut (z wyjątkiem starych wersji IE) reprezentuje stan początkowy lub jest przeznaczony dla atrybutów html, ponieważ są one ściśle zdefiniowane. atrybut nie mówi nic o bieżącym stanie.
Dla checkbox (jquery 1.6+)
<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 checked, selected, disabled, readOnly..etc podczas gdy attr zwraca zdefiniowany łańcuch. Możesz więc użyć bezpośrednio .prop ('checked') w warunku if.
.attr () wzywa .prop ()metoda attr () będzie nieco wolniejsza od bezpośredniego dostępu do nich .prop ().
Dla jQuery 1.6+, prop będzie najczęściej używany, ponieważ jest prosty i szerszy niż attr. W większości starych projektów, attr jest używany do uzyskania informacji o aktualnym stanie element. Ale teraz prop podjął tę pracę i attr zostałby zastąpiony prop.
Nadzieja, to pomaga.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 13:19:26
Odpowiedź Gary 'ego Hole' a jest bardzo istotna dla rozwiązania problemu, jeśli kod jest napisany w taki sposób]}
obj.prop("style","border:1px red solid;")
Ponieważ funkcja prop zwraca obiekt CSSStyleDeclaration
, powyższy kod nie będzie działał poprawnie w niektórych przeglądarkach (testowane z IE8 with Chrome Frame Plugin
w moim przypadku).
W ten sposób zmieniając go na następujący kod
obj.prop("style").cssText = "border:1px red solid;"
Rozwiązałem problem.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-15 10:30:09