jQuery获取attr()与prop()属性值的方法及区别介绍

 更新时间:2016年07月06日 17:07:04   作者:Bigdots  
这篇文章主要介绍了jQuery获取attr()与prop()属性值的方法及区别介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

今天在项目中使用<select></select>下拉菜单时,使用juery操作,使页面加载完菜单默认选中的值为2,我一开始的操作如下:

<!--html部分-->
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
/**js部分**/
$("select").attr("selected","selected"); 

咋一看好完美,木问题,但是我发现在Safari浏览器中,根本不起作用!!仔细查看一番发现,在Safari浏览器中,属性确实是设置成功了,既value=2的那一项确实是<option value="2" selected="selected">2</option>。那问题出在哪呢?冷静,不要方,万能的stack说只要把attr改成prop就行了,卧槽还真行了,这是啥诡异事件。好吧,我们需要来研究研究了,不用想,肯定是需要祭出官方文档了。

1.attr() : 获取匹配的元素集合中的第一个元素的属性的值 或 设置每一个匹配元素的一个或多个属性。 •.attr( attributeName ) •.attr( attributeName )

•.attr( attributeName, value ) •.attr( attributeName, value )
•.attr( attributes )
•.attr( attributeName, function(index, attr) )

2.prop() : 获取匹配的元素集中第一个元素的属性(property)值或设置每一个匹配元素的一个或多个属性。 •.prop( propertyName ) •.prop( propertyName )

•.prop( propertyName, value ) •.prop( propertyName, value )
•.prop( properties )
•.prop( propertyName, function(index, oldPropertyValue) )

看出区别了吗,没错,是参数有区别,attr()传入的是attributeName,而prop()传入的是propertyName,现在我们的问题转移了,我们需要研究的是attributeName和propertyName之间的区别了。

Attributes vs. Properties

在这里,我们可以将attribute理解为“特性”,property理解为为“属性”从而来区分俩者的差异。
如果把DOM元素看成是一个普通的Object对象,这个对象在其定义时就具有一些属性(property),比如把select的option当做一个对象:

var option = {
selected:false,
disabled:false,
attributes:[],
...
} 

现在,我们一目了然了,attribute是一个特性节点,每个DOM元素都有一个对应的attributes属性来存放所有的attribute节点,它是一个类数组的容器。attributes的每个数字索引以名值对(name=”value”)的形式存放了一个attribute节点。而property就是一个属性,是一个以名值对(name=”value”)的形式存放在Object中的属性。

回到一开始的问题,根据W3C的表单规范 ,在selected属性(property)是一个布尔属性, 这意味着,如果这个特性(attribute)存在, 即使该特性没有对应的值,或者被设置为空字符串值,或甚至是"false",相应的属性(property)都还是为true。 selected特性(attribute)值不会因为复选框的状态而改变,而selected属性(property)会因为复选框的状态而改变。因此,跨浏览器兼容的检索和更改DOM属性,比如元素的checked, selected, 或 disabled状态,请使用.prop()方法。

jquery中attr和prop的区别介绍

在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了。

关于它们两个的区别,网上的答案很多。这里谈谈我的心得,我的心得很简单:

 •对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。

•对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

上面的描述也许有点模糊,举几个例子就知道了。 

<a href="http://www.baidu.com" target="_self" class="btn">百度</a> 

这个例子里<a>元素的DOM属性有“href、target和class",这些属性就是<a>元素本身就带有的属性,也是W3C标准里就包含有这几个属性,或者说在IDE里能够智能提示出的属性,这些就叫做固有属性。处理这些属性时,建议使用prop方法。

<a href="#" id="link1" action="delete">删除</a> 

这个例子里<a>元素的DOM属性有“href、id和action”,很明显,前两个是固有属性,而后面一个“action”属性是我们自己自定义上去的,<a>元素本身是没有这个属性的。这种就是自定义的DOM属性。处理这些属性时,建议使用attr方法。使用prop方法取值和设置属性值时,都会返回undefined值。

再举一个例子:

<input id="chk1" type="checkbox" />是否可见<input id="chk2" type="checkbox" checked="checked" />是否可见

像checkbox,radio和select这样的元素,选中属性对应“checked”和“selected”,这些也属于固有属性,因此需要使用prop方法去操作才能获得正确的结果。

$("#chk1").prop("checked") == false
$("#chk2").prop("checked") == true

如果上面使用attr方法,则会出现:

$("#chk1").attr("checked") == undefined
$("#chk2").attr("checked") == "checked"

相关文章

  • jquery实现刷新随机变化样式特效(tag标签样式)

    jquery实现刷新随机变化样式特效(tag标签样式)

    本文主要介绍了tag标签随机多彩变化的超链接样式,使用JQ+DIV+CSS实现刷新随机变化样式特效。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • jquery实现表单验证简单实例演示

    jquery实现表单验证简单实例演示

    这篇文章向大家推荐了一个jquery实现表单验证简单实例演示,需要的朋友可以参考下
    2015-11-11
  • 基于Jquery的表格隔行换色,移动换色,点击换色插件

    基于Jquery的表格隔行换色,移动换色,点击换色插件

    希望能和大家一起交流学习。先放上去一个上周学习的一个jquery插件,基于Jquery的表格隔行换色,移动换色,点击换色插件。
    2010-12-12
  • juqery 学习之四 筛选过滤

    juqery 学习之四 筛选过滤

    juqery 学习之四 筛选过滤函数说明,学习jquery的朋友可以参考下。
    2010-11-11
  • imgAreaSelect 中文文档帮助说明

    imgAreaSelect 中文文档帮助说明

    ImgAreaSelect是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,非常的fashion。另外,可以在这个选择图像区域的基础上应用网站的其他一些技术,比如图片拖曳、图片编辑等。
    2011-10-10
  • jQuery实现的分页功能示例

    jQuery实现的分页功能示例

    这篇文章主要介绍了jQuery实现的分页功能,结合实例形式较为详细的分析了jQuery实现分页功能的具体步骤及相关操作技巧,包括前台样式、布局及jQuery分页插件的调用方法,需要的朋友可以参考下
    2017-01-01
  • jQuery中get方法用法分析

    jQuery中get方法用法分析

    这篇文章主要介绍了jQuery中get方法用法,结合实例形式分析了jQuery的ajax交互中get方法的功能、参数、使用方法与相关注意事项,需要的朋友可以参考下
    2016-12-12
  • jQuery序列化后的表单值转换成Json

    jQuery序列化后的表单值转换成Json

    这篇文章主要介绍了Jquery序列化后的表单值转换成Json的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • jQuery 如何先创建、再修改、后添加DOM元素

    jQuery 如何先创建、再修改、后添加DOM元素

    这篇文章主要介绍了jQuery 如何创建、修改、添加DOM元素,需要的朋友可以参考下
    2014-05-05
  • 40款非常棒的jQuery 插件和制作教程(系列一)

    40款非常棒的jQuery 插件和制作教程(系列一)

    jQuery 是一个非常优秀的 JavaScript 框架,在现在的 Web 开发项目中扮演着重要角色。jQuery 使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入一些非常好的效果,让网站有更好的可用性和用户体验
    2011-10-10

最新评论