Jquery属性获取——attr()与prop

boyanx8个月前技术教程34

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




/**js部分**/
$("select").attr("selected","selected");

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

  1. attr : 获取匹配的元素集合中的第一个元素的属性的值 或 设置每一个匹配元素的一个或多个属性。
    • .attr( attributeName )
    • .attr( attributeName, value )
      • .attr( attributeName, value )
      • .attr( attributes )
      • .attr( attributeName, function(index, attr) )
  2. prop : 获取匹配的元素集中第一个元素的属性(property)值或设置每一个匹配元素的一个或多个属性。
    • .prop( propertyName )
    • .prop( propertyName, value )
      • .prop( propertyName, value )
      • .prop( properties )
      • .prop( propertyName, function(index, oldPropertyValue) )

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

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方法。

为什么会搞混?

之所以attribute和property容易混倄在一起的原因是,很多attribute节点还有一个相对应的property属性,比如DOM元素的id和class既是attribute,也有对应的property,不管使用哪种方法都可以访问和修改。

相关文章

产品经理技术脑:Bootstrap

什么是 Bootstrap?Bootstrap 是Web 应用程序的前端框架。基于 HTML、CSS、JAVASCRIPT 。Bootstrap由美国Twitter公司的设计师Mark Otto和Ja...

上万条数据 批量录入系统的自动化过程

在日常的工作中 ,使用Excel保存处理数据很方便,但不利于分散数据收集和统计。如果建立了信息管理系统,就需要把数据批量录入到管理系统,如果系统不提供数据导入功能,仅靠人工录入数据,不仅费时费力,还特...

Angular UI组件库入门指南 - 如何安装和开始使用(一)

本文主要介绍如何安装和开始使用Kendo UI for Angular。首先完成安装步骤。然后创建一个简单的应用程序,其中包含一些Kendo UI for Angular组件,应用程序源代码可供您参考...

web前端的左侧导航狼,难道你不想试试吗?

斑斓说左侧二级菜单良多前端新手会写下拉或者其他的菜单,可是一写二级菜单就出错了。知识点:html标签(div,ul,a),css款式属性(浮动,定位),构造思惟,js根本,逻辑思维。源码:斑斓说左侧二...

用于 Web 开发的 15 大 Angular 框架和库

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。我们将讨论继续占据主导地位的顶级 Angular 框架,以及一些较小但有前途的后起之秀。随着我们...

jquery选择器

1 jQuery 选择器jQuery选择器共有四大类,分别为基本选择器,层次选择器,过滤选择器和表单选择器。1.1 基本选择器基本选择器是 jQuery 中最常用的选择器, 也是最简单的选择器, 它通...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。