有关attribute和property,以及各自对select中option的影响
这个问题老生常谈,但是直到现在我依旧时常会把它搞混。下面列一些各自的特性。
| 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的影响的更多相关文章
- 下拉框select中option居中样式
下拉框select中option居中样式 text-align:center;text-align-last:center;
- select中option的onclick事件失效
html: <select id="pageSelect"> <option value="1" selected onclick=" ...
- js html标签select 中option 删除除了第一行外的其他行
背景:共两个下拉框,第一个下拉框选择完之后,以第一个选定的值为条件返回第二个下拉框中的内容,用js中的createElement()创建,并利用appendChild()来添加进父标签.出现意外:每次 ...
- js添加select中option
1.js代码 $("#year").append("<option value="+value的值+">"+内容+"& ...
- js 获取select 中option 的个数
//document.writeln(document.getElementById("sel").options.length); //document.writeln(docu ...
- attribute和property兼容性分析
上一篇文章中,详细的分析了他们的区别,请看Javascript中的attribute和property分析 这次,来详细的看下他们的兼容性,这些内容主要来自于对于jQuery(1.9.x)源代码的分析 ...
- 作为 attribute 和 property 的 value 及 Vue.js 的相关处理
attribute 和 property 是 Web 开发中,比较容易混淆的概念,而对于 value,因其特殊性,更易困惑,本文尝试做一下梳理和例证 attribute 和 property 的概念 ...
- javascript DOM 操作 attribute 和 property 的区别
javascript DOM 操作 attribute 和 property 的区别 在做 URLRedirector 扩展时,注意到在使用 jquery 操作 checkbox 是否勾选时,用 at ...
- JavaScript的attribute和property辨析
1.Attribute Attribute是HTML上设置的属性,在html中显式地设置,或者通过setAttribute()方法设置. <input type='text' id='txt' ...
随机推荐
- RxAndroid/java小记
Rxandroid 作为一个在设计模式中能把MVP发挥的淋漓尽致的框架不去学习感觉真的对不起自己,然后也学点新东西吧,响应式编程,MVP观察者模式,然后使用RxAndroid使我们自己的代码更加简洁 ...
- virtualbox虚拟机中的centos与macos共享文件夹
开发中需要用到linux环境,所以使用共享模式开发.通过samba服务器来实现. 环境: 虚拟机 virtualbox 虚拟系统 centos 6.6 本机 macos 192.168.1.102 ...
- MySQL 日期时间相关函数整理
-- 为日期增加一个时间间隔:date_add() SELECT NOW(); YEAR); MONTH); DAY); HOUR); MINUTE); SECOND); MICROSECOND); ...
- JS学习之事件流
本文是原创文章,如需转载,请注明文章出处 JS和AS师出同源,所以事件流的3个阶段也跟AS一样,分别是捕获阶段,目标阶段,冒泡阶段. 下面写了个例子可以清晰的看出事件流的顺序: eventTest.h ...
- android adb常用命令
android adb命令: adb root --获取root.adb remount --获取文件操作权限(push)adb shell pm list package 获取包名列表com.mqt ...
- Linux 系统把英文修改成中文界面
1.一般安装后的linux系统都是英文的界面,网上查了一下各种说法都有,我只做了如下的配置就好了,下载个中文包,改一下i18n就完事了,并没有那么复杂 下面上图文: 目前是英文的界面 2.下载个中文包 ...
- Windows Phone 10如何借Windows 10的东风
距微软发布Windows Phone 7已经四年多了,WinPhone的市场份额一直萎糜不前.去年微软收购诺基亚,如特洛伊木马般戏剧,却没有挽救WinPhone,甚至出现下滑,已经不足3%,已经基本被 ...
- C++与C的关系
C是结构化和模块化的语言,是基于过程的. C++是面向对象的程序设计语言. C++是C的超集,对C的功能做了扩充,增加了面向对象的机制. C++包含头文件的 ...
- recovery编译问题汇总
1.修改支持USB大容量存储 (1).首先需要查看手机lun位置 手机链接电脑,打开cmd命令行,依次输入以下命令: adb shell find /sys -name "lun" ...
- maven_spring mvc_mina_dome(实体,文件,批传)(spring mina 初学dome)
看我们群里经常有人在问mina心跳问题,虽然俺是菜鸟可是觉得挺简单的啊,就写了个dome,希望大家多多提意见. 俺做过一段时间网络协议.所以觉得挺简单的吧.哎呀,反正技术就那样了没啥难的. 废话不多说 ...