jQuery中的attr、prop、data方法区别如下:
1.attr用来读写HTML节点上的属性
2.prop用来读写DOM对象的属性以及状态相关的属性
3.data用来读写自定义的jquery属性
1
| <input type="checkbox" id="demo" class="demo_class" style="width:20px;" myattr="html_attr" data-test="demo_data">
|
上面的HTML标签中,带有id、class、style、myattr、data-test等属性,用三种方法读出来的结果分别是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| console.log($('#demo').attr('id')) console.log($('#demo').attr('type')) console.log($('#demo').attr('class')) console.log($('#demo').attr('className')) console.log($('#demo').attr('style')) console.log($('#demo').attr('myattr')) console.log($('#demo').attr('data-test')) console.log($('#demo').attr('checked'))
console.log($('#demo').prop('id')) console.log($('#demo').prop('type')) console.log($('#demo').prop('class')) console.log($('#demo').prop('className')) console.log($('#demo').prop('style')) console.log($('#demo').prop('myattr')) console.log($('#demo').prop('data-test')) console.log($('#demo').prop('checked'))
console.log($('#demo').data('test'))
|
可以看到,attr方法可以读出HTML标签上的所有属性,prop方法可以读出HTML标签的部分属性(id、class、name、type、checked、selected、disabled、selectedIndex、tagName、nodeName、nodeType、ownerDocument、defaultChecked 和 defaultSelected等),data方法可以读出HTML标签上以“data-”开头的属性。
此外,prop可以正确读出checked、selected等属性,并且在更新状态之后也能正确识别,而attr读不到或者读到的不正确。
接着我们用三种方法对这个DOM对象的属性进行设置,并分别用三种方式读取设置的属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $('#demo').attr('data-attr',1); $('#demo').prop('data-prop',2); $('#demo').data('data',3);
console.log($('#demo').attr('data-attr')) console.log($('#demo').attr('data-prop')) console.log($('#demo').attr('data-data'))
console.log($('#demo').prop('data-attr')) console.log($('#demo').prop('data-prop')) console.log($('#demo').prop('data-data'))
console.log($('#demo').data('attr')) console.log($('#demo').data('prop')) console.log($('#demo').data('data'))
|
可以发现用attr设置的属性将会直接反映到HTML标签上,其中prop原本就能读取的那些固有属性会同步更新,而自定义属性不会更新,data读到的自定义属性也不会更新。
prop无法修改固有属性,但是能修改checked、selected等,prop设置的属性将会被保存在DOM对象中,但是prop设置的属性不能被attr、data方法读取,data方法设置的属性也不能被attr、prop方法读取。
因此,如果是HTML标签上带有的属性,最好用attr方法来读写;自定义属性可以用data方法读写;checked、selected、disabled等状态属性只能用prop来读写。