Jadi jQuery 1.6 memiliki fungsi baru prop()
.
$(selector).click(function(){
//instead of:
this.getAttribute('style');
//do i use:
$(this).prop('style');
//or:
$(this).attr('style');
})
atau dalam hal ini apakah mereka melakukan hal yang sama?
Dan jika saya tidak harus beralih menggunakan prop()
, semua lama attr()
panggilan akan pecah jika saya beralih ke 1.6?
MEMPERBARUI
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>
(lihat juga biola ini: http://jsfiddle.net/maniator/JpUF2/ )
Konsol mencatat getAttribute
sebagai string, dan attr
sebagai string, tetapi prop
sebagai CSSStyleDeclaration
, Mengapa? Dan bagaimana hal itu mempengaruhi pengkodean saya di masa mendatang?
Jawaban:
Pembaruan 1 November 2012
Jawaban asli saya berlaku khusus untuk jQuery 1.6. Saran saya tetap sama tetapi jQuery 1.6.1 mengubah sedikit hal: dalam menghadapi tumpukan situs web yang diprediksi, tim jQuery kembali
attr()
ke sesuatu yang dekat dengan (tetapi tidak persis sama dengan) perilaku lamanya untuk atribut Boolean . John Resig juga membuat blog tentang hal itu . Saya bisa melihat kesulitan yang mereka hadapi tetapi masih tidak setuju dengan rekomendasi yang lebih disukaiattr()
.Jawaban asli
Jika Anda hanya pernah menggunakan jQuery dan bukan DOM secara langsung, ini bisa menjadi perubahan yang membingungkan, meskipun ini jelas merupakan perbaikan secara konseptual. Tidak begitu baik untuk bazillions situs yang menggunakan jQuery yang akan rusak karena perubahan ini.
Saya akan merangkum masalah utama:
prop()
daripadaattr()
.prop()
lakukan apa yangattr()
biasa dilakukan. Mengganti panggilan denganattr()
denganprop()
dalam kode Anda umumnya akan berfungsi.checked
properti adalah Boolean,style
properti adalah objek dengan properti individual untuk setiap gaya,size
properti adalah angka.value
danchecked
: untuk atribut ini, properti selalu mewakili keadaan saat ini sementara atribut (kecuali dalam versi IE lama) sesuai dengan nilai default / kesesuaian input (tercermin dalamdefaultValue
/defaultChecked
properti).Jika Anda seorang pengembang jQuery dan bingung dengan seluruh bisnis ini tentang properti dan atribut, Anda perlu mengambil langkah mundur dan belajar sedikit tentang itu, karena jQuery tidak lagi berusaha begitu keras untuk melindungi Anda dari hal-hal ini. Untuk kata otoritatif tapi agak kering pada subjek, ada spesifikasi: DOM4 , HTML DOM , DOM Level 2 , DOM Level 3 . Dokumentasi DOM Mozilla ini valid untuk sebagian besar browser modern dan lebih mudah dibaca daripada spesifikasi, sehingga Anda dapat menemukan referensi DOM mereka bermanfaat. Ada bagian tentang properti elemen .
Sebagai contoh bagaimana properti lebih mudah ditangani daripada atribut, pertimbangkan kotak centang yang awalnya diperiksa. Berikut adalah dua kemungkinan HTML yang valid untuk melakukan ini:
Jadi, bagaimana Anda mengetahui jika kotak centang dicentang dengan jQuery? Lihatlah Stack Overflow dan Anda biasanya akan menemukan saran berikut:
if ( $("#cb").attr("checked") === true ) {...}
if ( $("#cb").attr("checked") == "checked" ) {...}
if ( $("#cb").is(":checked") ) {...}
Ini sebenarnya adalah hal paling sederhana di dunia untuk dilakukan dengan
checked
properti Boolean, yang telah ada dan bekerja dengan sempurna di setiap browser skrip utama sejak 1995:if (document.getElementById("cb").checked) {...}
Properti juga membuat memeriksa atau menghapus centang pada kotak centang sepele:
document.getElementById("cb").checked = false
Di jQuery 1.6, ini menjadi jelas
$("#cb").prop("checked", false)
Gagasan untuk menggunakan
checked
atribut untuk skrip kotak centang tidak membantu dan tidak perlu. Properti adalah yang Anda butuhkan.checked
atributsumber
value
contoh Tim , misalnya. Fungsi yang dipanggilattr
yang mengambil propertivalue
daripada atribut "nilai" tidak masuk akal (dan mereka bisa berbeda). Ke depan,attr
melakukan atribut danprop
melakukan properti akan lebih jelas, meskipun transisi akan menyakitkan bagi sebagian orang. Jangan salah paham, tidak ada yang seperti melangkah mundur dan membaca spesifikasi untuk mendapatkan gambaran tentang apa itu properti.value
misalnya), tetapi mari kita coba untuk mengabaikannya. 99% dari waktu, Anda ingin bekerja dengan alat peraga. Jika Anda perlu bekerja dengan atribut yang sebenarnya, Anda mungkin akan tahu itu.value
properti input tidak mengubahvalue
atributnya di peramban modern" Saya tidak berpikir itu terjadi, itulah sebabnya saya mulai menggunakannya sebagai contoh, tetapi ketika saya mulai mengkodekan contoh, terkutuk jika tidak diperbarui di Chrome, Firefox, Opera, IE ... - jsbin.com/ahire4 Ternyata itu karena saya menggunakaninput[type="button"]
untuk percobaan saya. Itu tidak memperbarui atribut padainput[type="text"]
- jsbin.com/ahire4/2 Bicara tentang berbelit-belit !! Bukan hanya unsurnya, tetapi jenisnya ...Saya pikir Tim mengatakannya dengan cukup baik , tapi mari kita mundur:
Elemen DOM adalah objek, benda di memori. Seperti kebanyakan objek di OOP, ia memiliki properti . Ini juga, secara terpisah, memiliki peta atribut yang ditentukan pada elemen (biasanya berasal dari markup yang dibaca browser untuk membuat elemen). Beberapa properti elemen mendapatkan nilai awal mereka dari atribut dengan nama yang sama atau mirip (
value
mendapatkan nilai awal dari atribut "nilai";href
mendapatkan nilai awal dari atribut "href", tetapi itu bukan nilai yang sama persis;className
dari atribut "class"). Properti lain mendapatkan nilai awalnya dengan cara lain: Misalnya,parentNode
properti mendapatkan nilainya berdasarkan elemen induknya;style
properti, apakah itu memiliki atribut "style" atau tidak.Mari kita pertimbangkan jangkar ini di halaman di
http://example.com/testing.html
:Beberapa seni ASCII gratis (dan meninggalkan banyak hal):
Perhatikan bahwa sifat dan atributnya berbeda.
Sekarang, meskipun mereka berbeda, karena semua ini berkembang alih-alih dirancang dari bawah ke atas, sejumlah properti menulis kembali ke atribut yang mereka berasal dari jika Anda mengaturnya. Tetapi tidak semua melakukannya, dan seperti yang Anda lihat dari
href
atas, pemetaan tidak selalu berupa "meneruskan nilai", terkadang ada interpretasi yang terlibat.Ketika saya berbicara tentang properti yang merupakan properti dari suatu objek, saya tidak berbicara secara abstrak. Ini beberapa kode non-jQuery:
(Nilai-nilai itu sesuai dengan kebanyakan browser; ada beberapa variasi.)
The
link
objek adalah hal yang nyata, dan Anda dapat melihat ada perbedaan nyata antara mengakses properti di atasnya, dan mengakses sebuah atribut .Seperti yang dikatakan Tim, sebagian besar waktu, kami ingin bekerja dengan properti. Sebagian karena nilai-nilai mereka (bahkan nama mereka) cenderung lebih konsisten di seluruh browser. Kami sebagian besar hanya ingin bekerja dengan atribut ketika tidak ada properti yang terkait dengannya (atribut khusus), atau ketika kami tahu bahwa untuk atribut tertentu, atribut dan properti bukan 1: 1 (seperti dengan
href
dan "href" di atas) .Properti standar disajikan dalam berbagai spesifikasi DOM:
Spesifikasi ini memiliki indeks yang sangat baik dan saya sarankan menyimpan tautan ke dalamnya; Saya menggunakannya sepanjang waktu.
Atribut khusus akan mencakup, misalnya,
data-xyz
atribut apa pun yang mungkin Anda masukkan ke elemen untuk memberikan meta-data ke kode Anda (sekarang itu berlaku pada HTML5, selama Anda tetap menggunakandata-
awalan). (Versi terbaru jQuery memberi Anda akses kedata-xyz
elemen melaluidata
fungsi, tetapi fungsi itu bukan hanya pengakses untukdata-xyz
atribut [ia melakukan keduanya lebih banyak dan lebih sedikit dari itu]; kecuali jika Anda benar-benar membutuhkan fitur-fiturnya, saya akan menggunakanattr
fungsi untuk berinteraksi dengandata-xyz
atribut.)The
attr
fungsi yang digunakan untuk memiliki beberapa berbelit-belit logika sekitar mendapatkan apa yang mereka pikir Anda inginkan, bukan secara harfiah mendapatkan atribut. Itu menyatukan konsep. Pindah keprop
danattr
dimaksudkan untuk menghapus konfigurasi mereka. Sebentar di v1.6.0 jQuery pergi terlalu jauh dalam hal itu, tapi fungsi dengan cepat ditambahkan kembali keattr
untuk menangani situasi umum di mana orang menggunakanattr
ketika teknis mereka harus menggunakanprop
.sumber
.attr('class', 'bla')
berfungsi seperti yang diharapkan untuk saya di 1.7.0 , 1.7.1 , dan 1.7.2 di Chrome 17, Firefox 11, Opera 11, IE6, IE8, IE9, dan Safari 5..data
- ia akan membaca nilai default atribut, jika ada, tetapi jika Anda menulisnya, itu akan mengubah properti tersembunyi dari elemen, dan tidak memperbarui atribut.Perubahan ini sudah lama terjadi untuk jQuery. Selama bertahun-tahun, mereka sudah puas dengan fungsi bernama
attr()
yang sebagian besar mengambil properti DOM, bukan hasil yang Anda harapkan dari nama. Pemisahanattr()
danprop()
harus membantu mengurangi beberapa kebingungan antara atribut HTML dan properti DOM.$.fn.prop()
meraih properti DOM yang ditentukan, sementara$.fn.attr()
mengambil atribut HTML yang ditentukan.Untuk sepenuhnya memahami cara kerjanya, berikut penjelasan panjang lebar tentang perbedaan antara atribut HTML dan properti DOM .:
Atribut HTML
Sintaksis:
<body onload="foo()">
Tujuan: Mengizinkan markup memiliki data yang terkait dengannya untuk acara, rendering, dan tujuan lain.
Visualisasi: Atribut kelas ditunjukkan di sini di badan. Ini dapat diakses melalui kode berikut:
Atribut dikembalikan dalam bentuk string dan dapat tidak konsisten dari browser ke browser. Namun, mereka dapat menjadi vital dalam beberapa situasi. Seperti dicontohkan di atas, IE 8 Quirks Mode (dan di bawah) mengharapkan nama properti DOM di get / set / removeAttribute alih-alih nama atribut. Ini adalah salah satu dari banyak alasan mengapa penting untuk mengetahui perbedaannya.
Properti DOM
Sintaksis:
document.body.onload = foo;
Tujuan: Memberikan akses ke properti yang dimiliki oleh elemen node. Properti ini mirip dengan atribut, tetapi hanya dapat diakses melalui JavaScript. Ini adalah perbedaan penting yang membantu memperjelas peran properti DOM. Harap perhatikan bahwa atribut sama sekali berbeda dari properti , karena penugasan event handler ini tidak berguna dan tidak akan menerima acara (badan tidak memiliki acara yang memuat, hanya atribut yang memuat).
Visualisasi:
Di sini, Anda akan melihat daftar properti di bawah tab "DOM" di Firebug. Ini adalah properti DOM. Anda akan segera melihat beberapa dari mereka, karena Anda akan menggunakannya sebelumnya tanpa menyadarinya. Nilai-nilainya adalah apa yang akan Anda terima melalui JavaScript.
Dokumentasi
Contoh
HTML:
<textarea id="test" value="foo"></textarea>
JavaScript:
alert($('#test').attr('value'));
Di versi jQuery sebelumnya, ini mengembalikan string kosong. Di 1.6, ini mengembalikan nilai yang tepat
foo
,.Tanpa melirik kode baru untuk salah satu fungsi, saya dapat mengatakan dengan yakin bahwa kebingungan lebih berkaitan dengan perbedaan antara atribut HTML dan properti DOM, daripada dengan kode itu sendiri. Mudah-mudahan, ini membereskan beberapa hal untuk Anda.
-Matt
sumber
$.prop()
mendapat properti DOM,$.attr()
mendapat atribut HTML. Saya mencoba menjembatani kesenjangan secara psikologis sehingga Anda dapat memahami perbedaan antara keduanya.$('#test').prop('value')
tidak mengembalikan apa pun? Juga tidak.attr('checked')
untuk kotak centang? Tapi dulu? Sekarang Anda harus mengubahnyaprop('checked')
? Saya tidak mengerti perlunya perbedaan ini - mengapa penting untuk membedakan antara atribut HTML dan properti DOM? Apa kasus penggunaan umum yang membuat perubahan ini "lama datang" ? Apa yang salah dengan mengabstraksikan perbedaan antara keduanya, karena sepertinya kasus penggunaan mereka sebagian besar tumpang tindih?value
adalah salah satu kasus yang paling jelas, karenavalue
properti akan memberi Anda nilai saat ini dari suatu bidang, tetapivalue
atribut akan memberi Anda nilai asli yang dideklarasikan dalamvalue="..."
atribut, yang sebenarnya adalahdefaultValue
properti. (Meskipun kasus khusus ini menjadi bingung lagi oleh bug di IE <9.)attr('value', ...)
di jQuery <1.6 menyetel properti, sehingga nilai saat ini berubah dan nilai default tidak. Dalam 1.6 itu menetapkan atribut, jadi dalam teori nilai default berubah dan nilai saat ini tidak. Namun, ada (lebih banyak) ketidakkonsistenan peramban tentang apa sebenarnya pengaturanvalue
atribut. Di IE ia menetapkan nilai saat ini juga; di beberapa browser hanya menetapkan nilai saat ini jika nilai saat ini belum ditetapkan sebelumnya. [menangis]Properti berada di DOM; atribut dalam HTML yang diuraikan ke dalam DOM.
Detail lebih lanjut
Jika Anda mengubah atribut, perubahan akan tercermin dalam DOM (kadang-kadang dengan nama yang berbeda).
Contoh: Mengubah
class
atribut tag akan mengubahclassName
properti tag itu di DOM. Jika Anda tidak memiliki atribut pada tag, Anda masih memiliki properti DOM yang sesuai dengan nilai kosong atau default.Contoh: Sementara tag Anda tidak memiliki
class
atribut, properti DOMclassName
memang ada dengan nilai string kosong.sunting
Jika Anda mengubah yang satu, yang lain akan diubah oleh controller, dan sebaliknya. Pengontrol ini bukan di jQuery, tetapi di kode asli browser.
sumber
jQuery('p').prop('className', 'foo');
di konsol Chrome dan Anda akan melihat, bagaimana setiap paragraf mendapatkanclass
atribut dari'foo'
. Tentu saja tidak dalam kode sumber, yang berasal dari server. Itu konstan.Hanya saja perbedaan antara atribut HTML dan objek DOM yang menyebabkan kebingungan. Bagi mereka yang nyaman bertindak pada elemen asli DOM elemen seperti
this.src
this.value
this.checked
dll,.prop
adalah sambutan yang sangat hangat untuk keluarga. Bagi yang lain, itu hanya lapisan kebingungan tambahan. Mari kita perjelas.Cara termudah untuk melihat perbedaan antara
.attr
dan.prop
adalah contoh berikut:$('input').attr('blah')
: mengembalikan'hello'
seperti yang diharapkan. Tidak ada kejutan di sini.$('input').prop('blah')
: mengembalikanundefined
- karena itu coba lakukan[HTMLInputElement].blah
- dan tidak ada properti seperti itu pada objek DOM ada. Itu hanya ada dalam ruang lingkup sebagai atribut elemen yaitu[HTMLInputElement].getAttribute('blah')
Sekarang kita mengubah beberapa hal seperti:
$('input').attr('blah')
: mengembalikan'apple'
eh? Mengapa tidak "pir" karena ini ditetapkan terakhir pada elemen itu. Karena properti diubah pada atribut input, bukan elemen input DOM itu sendiri - mereka pada dasarnya hampir bekerja secara independen satu sama lain.$('input').prop('blah')
: pengembalian'pear'
Hal yang Anda benar-benar harus berhati-hati adalah jangan campur penggunaan ini untuk properti yang sama di seluruh aplikasi Anda karena alasan di atas.
Lihat biola mendemonstrasikan perbedaan: http://jsfiddle.net/garreh/uLQXc/
.attr
vs.prop
:Babak 1: gaya
.attr('style')
- Mengembalikan gaya sebaris untuk elemen yang cocok yaitu"font:arial;"
.prop('style')
- Mengembalikan objek pernyataan gaya yaituCSSStyleDeclaration
Babak 2: nilai
.attr('value')
- pengembalian'hello'
*.prop('value')
- pengembalian'i changed the value'
* Catatan: jQuery karena alasan ini memiliki
.val()
metode, yang secara internal setara dengan.prop('value')
sumber
TL; DR
Gunakan
prop()
lebihattr()
dalam sebagian besar kasus.Sebuah properti adalah keadaan saat elemen input. Sebuah atribut adalah nilai default.
Properti dapat berisi hal-hal dari tipe yang berbeda. Atribut hanya dapat berisi string
sumber
prop() and when to go for attr()
. menunggu jawaban :)Keterbukaan kotor
Konsep ini memberikan contoh di mana perbedaan dapat diamati: http://www.w3.org/TR/html5/forms.html#concept-input-checked-dirty
Cobalah:
prop
kotak centang yang dicentang. BANG!Untuk beberapa atribut seperti
disabled
padabutton
, menambahkan atau menghapus atribut kontendisabled="disabled"
selalu mengubah properti (disebut atribut IDL di HTML5) karena http://www.w3.org/TR/html5/forms.html#attr-fe-disabled mengatakan:jadi Anda mungkin lolos begitu saja, meskipun jelek karena memodifikasi HTML tanpa perlu.
Untuk atribut lain seperti
checked="checked"
padainput type="checkbox"
, hal-hal rusak, karena begitu Anda mengkliknya, itu menjadi kotor, dan kemudian menambahkan atau menghapuschecked="checked"
atribut konten tidak beralih keseksian lagi .Inilah sebabnya mengapa Anda harus menggunakan sebagian besar
.prop
, karena hal itu mempengaruhi properti efektif secara langsung, daripada mengandalkan efek samping kompleks dari memodifikasi HTML.sumber
checked
atribut:checked="checked"
Semua ada dalam dokumen :
Jadi, gunakan prop!
sumber
$.attr()
mengambil properti sebagian besar waktu saya bekerja dengannya, bukan "kadang-kadang". Kebingungan yang disebabkan olehnya masih bergema sampai sekarang. Sayangnya, saya mengalami banyak kesulitan menemukan bacaan pasti pada atribut HTML vs properti DOM, jadi saya mungkin menulis jawaban di sini sedikit.atribut ada dalam dokumen / file teks HTML Anda (== bayangkan ini adalah hasil dari markup html Anda diurai), sedangkan
properti berada di pohon HTML DOM (== pada dasarnya merupakan properti aktual dari beberapa objek dalam arti JS).
Yang penting, banyak dari mereka yang disinkronkan (jika Anda memperbarui
class
properti,class
atribut dalam html juga akan diperbarui; dan jika tidak). Tetapi beberapa atribut mungkin disinkronkan ke properti yang tidak terduga - misalnya, atributchecked
sesuai dengan propertidefaultChecked
, sehingga.prop('checked')
nilai, tetapi tidak akan berubah.attr('checked')
dan.prop('defaultChecked')
nilai$('#input').prop('defaultChecked', true)
juga akan berubah.attr('checked')
, tetapi ini tidak akan terlihat pada elemen.Dan ini adalah tabel yang menunjukkan di mana
.prop()
lebih disukai (meskipun.attr()
masih dapat digunakan).Mengapa Anda terkadang ingin menggunakan .prop () alih-alih .attr () di mana yang terakhir disarankan secara resmi?
.prop()
dapat mengembalikan semua tipe - string, integer, boolean; sementara.attr()
selalu mengembalikan string..prop()
dikatakan sekitar 2,5 kali lebih cepat dari.attr()
.sumber
$('#myImageId').prop('src', 'http://example.com/img.png')
,var class = $('.myDivClass').prop('class')
, atau$('#myTextBox').prop('type', 'button')
. Dan seterusnya ....prop()
berfungsi baik dengan semua properti. Anda tidak ingin menandai semua properti di.prop()
kolom, bukan?.prop()
lebih disukai (meskipun.attr()
masih dapat digunakan)'.attr()
untuk mendefinisikan suatu peristiwa apa yang.prop()
tidak bisa. Seperti ini:$('.myDiv').attr('onclick', 'alert("Hello world!")')
. Jika Anda mengubah.attr()
ke.prop()
, tidak akan bekerja. Benar-benar, saya pikir tidak ada alasan untuk digunakan.attr()
untuk mengatur atau mendapatkan nilaiid/class/href/checked/src.....
. Perhatikan bahwa saya tidak mengatakan Anda salah..attr()
:.prop()
:sumber
Biasanya Anda ingin menggunakan properti. Gunakan atribut hanya untuk:
<input value="abc">.
sumber
attributes
-> HTMLproperties
-> DOMsumber
attirbutes
juga salah satu propertiDOM
Sebelum jQuery 1.6,
attr()
metode terkadang - mengambil nilai properti ke dalam akun ketika mengambil atribut, ini menyebabkan perilaku yang agak tidak konsisten.Pengenalan
prop()
metode ini menyediakan cara untuk secara eksplisit mengambil nilai properti, sambil.attr()
mengambil atribut.The Documents:
jQuery.attr()
Dapatkan nilai atribut untuk elemen pertama di set elemen yang cocok.jQuery.prop()
Dapatkan nilai properti untuk elemen pertama di set elemen yang cocok.sumber
Pengingat lembut tentang penggunaan
prop()
, contoh:Fungsi di atas digunakan untuk memeriksa apakah checkbox1 dicentang atau tidak, jika dicentang: return 1; jika tidak: return 0. Function prop () digunakan di sini sebagai fungsi GET.
Fungsi di atas digunakan untuk mengatur checkbox1 untuk diperiksa dan SELALU kembali 1. Sekarang fungsi prop () digunakan sebagai fungsi SET.
Jangan mengacau.
P / S: Ketika saya memeriksa properti Image src . Jika src kosong, sangga kembalikan URL halaman saat ini (salah), dan attr kembalikan string kosong (kanan).
sumber
<img src="smiley.gif" alt="Smiley face" width="42" height="42" onclick="alert($(this).prop('src'))">
. Seharusnya berfungsi dan mengembalikan lokasi gambar.Satu hal yang
.attr()
dapat dilakukan adalah.prop()
: mempengaruhi pemilih CSSIni masalah yang tidak saya lihat di jawaban yang lain.
Pemilih CSS
[name=value]
.attr('name', 'value')
.prop('name', 'value')
.prop()
hanya memengaruhi beberapa penyeleksi atributinput[name]
(terima kasih @TimDown ).attr()
mempengaruhi semua pemilih-atributinput[value]
input[naame]
span[name]
input[data-custom-attribute]
(tidak akan.data('custom-attribute')
mempengaruhi pemilih ini)sumber
Sebagian besar kita ingin menggunakan untuk objek DOM daripada atribut kustom suka
data-img, data-xyz
.Juga ada beberapa perbedaan ketika mengakses
checkbox
nilai danhref
denganattr()
danprop()
sebagai hal berubah dengan output DOM denganprop()
tautan penuh dariorigin
danBoolean
nilai untuk kotak centang(pre-1.6)
Kami hanya dapat mengakses elemen DOM dengan yang
prop
lain dari yang diberikannyaundefined
Tampilkan cuplikan kode
sumber
Ada beberapa pertimbangan lain dalam prop () vs attr ():
selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, dan defaultSelected..etc harus diambil dan diatur dengan metode .prop (). Ini tidak memiliki atribut yang sesuai dan hanya properti.
Untuk kotak centang ketik input
metode prop mengembalikan nilai Boolean untuk diperiksa, dipilih, dinonaktifkan, readOnly..etc sementara attr mengembalikan string yang ditentukan. Jadi, Anda bisa langsung menggunakan .prop ('dicentang') dalam kondisi if.
.attr () memanggil .prop () secara internal sehingga metode .attr () akan sedikit lebih lambat daripada mengaksesnya secara langsung melalui .prop ().
sumber
Jawaban Gary Hole sangat relevan untuk menyelesaikan masalah jika kode ditulis sedemikian rupa
Karena fungsi prop mengembalikan
CSSStyleDeclaration
objek, kode di atas tidak akan berfungsi dengan baik di beberapa browser (diuji denganIE8 with Chrome Frame Plugin
dalam kasus saya).Jadi mengubahnya menjadi kode berikut
memecahkan masalah.
sumber