这个问题老生常谈,但是直到现在我依旧时常会把它搞混。下面列一些各自的特性。

  attribute property
设置方法

option.setAttribute('selected', true)

option.getAttribute('selected')

option.selected = true
dom节点表现

会表现在html节点上。打开控制台,可以看到

<option selected=true></option>

不会表现在html中。打开控制台,孤零零的

:<option></option>

数据类型

当你把一个对象传给attribute时,它会转为string类型,

根据dom节点表现特点,很好理解,html代码就是字符串不可能有什么数据类型。

比如:

option.setAttribute('test', {})

option.getAttribute('test')

你将得到"[object object]",它自动调用了Object.toString方法

而当你把一个对象传给property时,你可以保留这个对象。

比如:

option.test = {};

这就是代码层级的东西,跟html一点关系都没有

由上面我们可以看到:

attribute总是试图与html代码串产生关联,对attribute的操作会直接反映在页面html代码中。attribute的这个特性可以让我们在js代码执行前就定义好某些变量,然后在js执行时获取它们,虽然这些变量都是字符串类型,但是提前定义变量可以让我们实现很多事,它被广泛的应用在smarty模板中。

如果要在js执行过程中保存变量到某dom节点,不妨使用property,它可以把变量类型完美的保存下来,因此可以把dom节点上内置实现的函数浅显的理解为property。

下面以select,option为栗子,谈一下浏览器执行时,这两个东西的表现。

<select>

<option id="one" value="1">北京</option>

<option id="two"value="2">上海</option>

</select>

代码 property attribute 选中状况

one: true

two: falss

one: null

two: null

默认状态,one选中

设置two的attribuite,让它选中

two.setAttrbute('selected', true)

one: false

two: true

one: null

two: true

two选中

虽然我们设置的是attribuite,但是property发生了变化。

这里one.selected自动变为false。two.selected自动变为true

然后我们设置one的attrbute,让它选中

one.setAttribute('selected', true)

one: true

two: false

one: true

two: true

one选中

设置one的attribute后,property同上一次一样,自动做出了相应的变化,

但是attribute严格按照我们的代码,保留了我们设置的属性,所以出现了两个attribute都是true的情况。

然后我们再次设置two的attribuite,让它选中

two.setAttrbute('selected', true)

one: false

two: true

one: true

two: true

two选中

我们可以看到,attibuite没有变化

property,更像是浏览器的当前状态的一个反应,不只代码影响它,用户的交互也可以影响它。而attibute仅仅依赖代码的执行,仅仅你的代码可以改变它。

而对于浏览器控件来说,会有一些特殊的属性来决定它的表现与动作,如value,selected等。实质上起作用的是property的值。但是当我们设置attribute时,也会自动触发propery的改变(从上表格可以看出,不管attribute值变化与否,只要赋值就会引发propery的变化),从而达到控制控件动作样式的目的。相对的,我们设置propery时,不会改变attribute,只能控制控件的动作样式。最近我在工作重发现,设置disabled的prop值时,attr也会受影响。button.disabled=true,反映在html中的状态是<button disabled></button>,再执行button.disabled=false,html恢复原样<button disabled></button>。

有关attribute和property,以及各自对select中option的影响的更多相关文章

  1. 下拉框select中option居中样式

    下拉框select中option居中样式 text-align:center;text-align-last:center;

  2. select中option的onclick事件失效

    html: <select id="pageSelect"> <option value="1" selected onclick=" ...

  3. js html标签select 中option 删除除了第一行外的其他行

    背景:共两个下拉框,第一个下拉框选择完之后,以第一个选定的值为条件返回第二个下拉框中的内容,用js中的createElement()创建,并利用appendChild()来添加进父标签.出现意外:每次 ...

  4. js添加select中option

    1.js代码 $("#year").append("<option value="+value的值+">"+内容+"& ...

  5. js 获取select 中option 的个数

    //document.writeln(document.getElementById("sel").options.length); //document.writeln(docu ...

  6. attribute和property兼容性分析

    上一篇文章中,详细的分析了他们的区别,请看Javascript中的attribute和property分析 这次,来详细的看下他们的兼容性,这些内容主要来自于对于jQuery(1.9.x)源代码的分析 ...

  7. 作为 attribute 和 property 的 value 及 Vue.js 的相关处理

    attribute 和 property 是 Web 开发中,比较容易混淆的概念,而对于 value,因其特殊性,更易困惑,本文尝试做一下梳理和例证 attribute 和 property 的概念 ...

  8. javascript DOM 操作 attribute 和 property 的区别

    javascript DOM 操作 attribute 和 property 的区别 在做 URLRedirector 扩展时,注意到在使用 jquery 操作 checkbox 是否勾选时,用 at ...

  9. JavaScript的attribute和property辨析

    1.Attribute Attribute是HTML上设置的属性,在html中显式地设置,或者通过setAttribute()方法设置. <input type='text' id='txt' ...

随机推荐

  1. MAC OSX环境下cordova+Ionic的安装配置

    一.简介 1.Ionic是什么 IONIC 是目前最有潜力的一款 HTML5 手机应用开发框架.通过 SASS 构建应用程序,它提供了很多 UI 组件来帮助开发者开发强大的应用. 它使用 JavaSc ...

  2. Response.Write("<script>alert('弹出对话框!')</script>") 后跟Response.Redirect("page.aspx");不能弹出对话框,直接跳转页面了 如何解?

    Response.Write和Response.Redirect一起用的时候就会这样,write脚本和redirect脚本不能同时使用,这样不会执行脚本,最好使用ClientScript 改进方法: ...

  3. JAVA06数组之动手动脑问题解决

     一.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 1.设计思路:首先生成10个随机数,然后存放至长度至少是10的数组中,然后计算10个随机 ...

  4. flume介绍与原理(一)

    1 .背景 flume是由cloudera软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一.尤其近几年随着flume的不断被完善以及升级版本 ...

  5. Unity3D Layout 快捷键

    我的需求是开发的时候一种布局,运行的时候一种布局,Unity3D 选项中的自定义快捷键的太少,只能另想办法.Google 之后,找到解决方法:Editor layout hotkeys? 1.创建菜单 ...

  6. VC++使用Pro*CC++

    几种数据库访问技术的比较 由上所述, Visual C++ 通过以上方法都可以访问Oracle 数据 库, 但是上述方法各有优缺点.ODBC 出现得比较早, 几乎支持所 有的关系型数据库, 而且有MF ...

  7. Socket通讯

    复习贴,资料大多来自百科.看了一遍理解了一遍,把绕口的话按语义给改了`_>` 对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.不管是Socket还是S ...

  8. 16061701(地图灯光编译Beast报错)

    [目标] 地图灯光编译报错 [思路] 1 我自己测c2_cwd_rt 附件为当时log 2 ExampleGame\BeastCache\PersistentCache 3 重新删除掉BeastCac ...

  9. javascript温故知新

    1 javascript作用域 初学javascript的时候,变量的作用域就感觉有些麻烦,他不像C#或java那样清晰明了,貌似处处都在作用域内,但有时会处处都是空. javascript中,变量的 ...

  10. ionic实现上拉到底内容提示

    <!--html代码--> <ion-content has-bouncing = true on-drag-up="scrollDragUp()"> &l ...