`
gavin2013
  • 浏览: 8766 次
社区版块
存档分类
最新评论

jQuery .attr() .prop() .data() 区别

阅读更多
首先看看三个方法的解释:

.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property。
.prop(),此方法jq1.6引入,读/写DOM的property。
.data(),此方法在jq1.2.3引入,作用是把任意的值读取/存储到DOM元素对应的jq对象上。
先说.attr()和.prop(),在jq1.6版之前,没有.prop()方法,而.attr()混淆了attribute和property的概念(不清楚他们有什么区别,请参考昨天的话题),导致使用时不小心就会出现bug,如果不读jq源码,还真说不清楚.attr()设置的是attribute还是property。

至于jq为什么这样设计,众说纷纭。有人说jq开发团队自己也没搞清楚attribute和property的区别,也有人说这是过度设计,jq认为用户没必要了解attribute和property的区别,干脆封装到一起了。不管原因是什么,jq这个设计确实不好。

2011年5月份,jq在新版本1.6版中引入新的API .prop()方法,不过升级过程挺痛苦,1.6版对比1.5.2版在.attr()的引入上没有做好向下兼容,一些人升级jq到1.6之后,发现自己的代码挂了。紧接着jq发布1.6.1版解决了兼容问题。

对于加入 .prop() 方法,jq的解释是:首先,给一些DOM对象属性property(比如nodeName,selectedIndex)的获取提供了更简洁的方案,情况前后的对比:

// 不用 .prop()
var elem = $("#foo")[0];
if ( elem ) {
    index = elem.selectedIndex;
}


// 用 .prop()
index = $("#foo").prop("selectedIndex");

另外还有一个原因是.prop()的效率好于.attr()。

下面说说.data(),我们知道HTML 5里面DOM标签可以加以一些data-xxx的属性,你可以把.data()看作是存取data-xxx这样DOM附加信息的方法。当然,.data()存取的内容不仅是字符串,还可以包含数组和对象。从jq1.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()的实际用途来看,跟.prop()似乎很像,都可以给DOM对象附加上一些自定义的值。我只能说,他们定位不同,看看他们的各自的方法名,再想想什么场景用什么方法吧。

最后,从性能上对比,.prop() > .data() > .attr(),不同浏览器不同版本.data()和.attr()的性能关系有差异,不过.prop()总是最优的。
分享到:
评论

相关推荐

    jquery.1.6.2.sdocml&jquery.1.4.2.sdocml

    1.6版本引入了属性选择器的改进,如[data-*]和[attr=value],并引入了attr()和prop()方法的分离,使得数据属性(data attributes)和DOM属性的处理更加清晰。prop()方法用于获取或设置DOM元素的属性,而attr()则主要...

    jQuery-1.7.js

    2. **`.attr()`与`.prop()`分离**:在之前的版本中,`.attr()`既用于获取属性值,也用于设置属性值。但在1.7版本中,`.prop()`被引入,专门用来处理DOM元素的属性,如checked、selected等,而`.attr()`则专注于HTML...

    jquery.api.3.2.1

    `.attr()`和`.prop()`用于读写属性,`.data()`处理自定义数据。 在3.2.1版本中,jQuery还优化了DOM遍历和性能。`.each()`可用于循环遍历集合,`.find()`, `.closest()`, `.siblings()`等方法则帮助定位和操作相关...

    jquery1.5.js和开发文档

    2. **属性操作**:如`.attr()`, `.prop()`,用于获取或设置元素属性。 3. **DOM操作**:`.append()`, `.prepend()`, `.remove()`等,用于元素的添加、删除和移动。 4. **事件处理**:`.on()`, `.off()`, `.trigger()...

    jquery需要的所有js文件

    9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c...

    jquery中attr、prop、data区别与用法分析

    jQuery作为前端开发中非常重要的JavaScript库,其提供的attr、prop和data方法分别用于操作HTML元素的属性,理解它们的区别与用法对于前端开发人员来说非常重要。本文将结合实例详细分析这三个方法的差异、功能、使用...

    jquery-min1.6

    2. **`.attr()`与`.prop()`的分离**:在1.6版本中,jQuery引入了`.prop()`方法,用于获取或设置DOM元素的属性值,而`.attr()`则主要用于处理HTML属性。这种区分使得DOM操作更加精确。 3. **事件绑定的改进**:1.6...

    jquery中attr和prop的区别分析

    总结来说,`attr` 和 `prop` 的主要区别在于: 1. `attr` 用于处理自定义属性和非固有属性,而`prop` 用于处理固有属性。 2. 固有属性(如`checked`、`selected`)使用`prop`可以获取或设置正确的布尔值,而`attr`则...

    jQuery.prop() 使用详解

    jQuery.prop()是jQuery库中的一个函数,它用于获取或设置匹配元素集合中每个元素的属性值。该函数是在jQuery版本1.6中引入的,用以替代旧版本中用于相似目的的.attr()方法。prop()函数主要用来处理DOM元素属性,而...

    jQuery 1.6.3正式版发布

    #9794:jQuery.fn.data() correctly handle access to arbitrary data property values #10016:Cannot retrieve “false-y” values under key names with dashes using jQuery.data method #10080:unload from ...

    jQuery中attr()和prop()在修改checked属性时的区别

    在jQuery中,`attr()`和`prop()`方法都是用来处理元素属性的,但它们之间存在重要的区别,尤其是在处理特定属性如`checked`时。`attr()`主要用于获取或设置HTML元素的attribute,而`prop()`则是用于操作元素的特性...

    jQuery第2天知识点:jQuery 样式操作、jQuery 属性操作.zip

    3. **`.data()`**:jQuery的`.data()`方法用于存储和检索与DOM元素关联的数据。这通常用于存储非HTML属性的额外信息。例如,`$('selector').data('key', 'value')`将数据`value`关联到元素的`key`上,而`$('selector...

    Web前端开发技术-Jquery的属性和内容操作.pptx

    本篇文章将详细讲解jQuery中关于属性和内容操作的几个关键方法:`prop()`、`attr()`以及`data()`。 首先,我们来看`prop()`方法。`prop()`用于处理元素的固有属性(intrinsic properties),这些属性与元素的内在...

    jquery1.6-2.1全版本资源包

    2. `.attr()`与`.prop()`分离:这是1.6最重要的改变,`.attr()`用于获取或设置元素的HTML属性,`.prop()`则用于处理DOM属性,如checked、selected等。 3. 新增`.on()`方法:虽然在1.7版本中才成为推荐的事件绑定...

    JQuery的attr 与val区别

    在jQuery库中,`.attr()`和`.val()`都是用于获取或设置HTML元素属性的方法,但它们有着明显的区别和各自的适用场景。以下是对这两个方法的详细解释: **.attr(attributeName)** `.attr()`方法主要用于获取或设置...

    Jquery中attr与prop的区别详解

    在jQuery中,`attr`和`prop`是两个用于获取和设置HTML元素属性的方法,但它们之间存在着重要的区别。在高版本的jQuery中,引入`prop`方法是为了更精确地处理元素的特性,特别是那些与JavaScript行为密切相关的属性。...

    jQuery1.4.1 小结

    例如,`.data()`方法现在可以直接与DOM元素的数据属性进行交互,`.attr()`和`.prop()`的区分更加明确,分别用于获取或设置元素属性和DOM属性。 ### 8. jQuery API.chm 提供的`jQueryAPI-.chm`文件是jQuery的离线...

    jquery1.6官方中文api+jquery1.7中文api

    2. **属性选择器增强**:增加了`attr()`方法,允许开发者获取或设置元素的属性值,同时区分了属性值(attribute)和特性值(property)的区别。 3. **新选择器**:引入了`:first-child`和`:last-child`伪类选择器,...

Global site tag (gtag.js) - Google Analytics