attr和prop分别是单词attribute和property的缩写,它们均表示“属性”的意思。
不过,在jQuery中,attribute和property却是两个不同的概念。
1.操作对象不同
attribute表示HTML文档节点属性,property表示JS对象的属性,
2.设计目的不同
prop()的设计目标用于设置或获取指定DOM元素(指的是JS对象,Element类型)上的属性(property);
attr()的设计目标是用于设置或获取指定DOM元素所对应的文档节点上的属性(attribute)。
3.依赖的原生JS方法不同
attr()主要依赖的是Element对象的getAttribute()和setAttribute()两个方法。
prop()主要依赖的则是js中原生的对象属性获取和设置方式。
4.应用版本不同
attr()是jQuery1.0版本就有的函数,
prop()是jQuery1.6版本新增的函数。
5.用于设置的属性值类型不同
用于attr()操作的是文档节点的属性,因此设置的属性值只能是字符串类型,如果不是字符串类型,也会调用其toString()方法将其转换为字符串类型。
prop()操作的是js对象的属性,设置的属性值可以为包括数组和对象在内的任意类型。
.data(),此方法在jq1.2.3引入,作用是把任意的值读取/存储到DOM元素对应的jq对象上。
在html5中DOM标签可以添加一些data-xxx的属性,可以把data()看作是存取data-xxx这样的DOM附加信息的方法。data()存取的内容可以是字符串、数组和对象。
从jQuery1.4.3起,html5的data-xxx属性会自动被添加到jq的data对象里,比如:
<div data-role="page" data-last-value="43" data-hidden="true" data-options=‘{"name":"noahlu"}‘></div>
下面的等式都成立:
$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "noahlu";
虽然data()用来存数据挺方便的,它也是有过不堪回首的过去,如:
<button id="foo" data-key="1.4000">Click me</button>
<script>
typeof $(‘#foo‘).data(‘key‘);
</script>
jQuery 1.8之前的版本输出’number’,1.8版本之后输出为’string’。
1.8版之前,data会把值转换成基本类型,其实我们这里想要的是’1.4000′并不是1.4。
data()设置值后,attr()不能获取设置后的值,比如:
复制代码
<a href="javascript:;" id="adom" data-name="doma"></a>
<script>
var adom = $("#adom");
adom.data("name","name1");
console.log("attr:"+adom.attr("data-name"));//doma
console.log("data:"+adom.data("name"));//name1
</script>