js高级程序设计中的特性和属性区分
参考:https://blog.51cto.com/jsw55667/1932634
其实attribute和property两个单词,翻译出来都是属性,但是《javascript高级程序设计》将它们翻译为特性和属性,以示区分。
定义:
- 元素特性attribute是指HTML元素标签的特性 id、class、title、a都是特性,其中a叫做自定义特性<div id=“id1” class=“class1” title=“title1” a=‘a1’></div>
- 对象属性property是指元素节点的属性 id、title、b都是属性,其中b叫做自定义属性<div id=“test”></div><script>test.id = ‘id2’;test.title = ‘title2’;test.b = ‘b2’;</script>
共有
-
id、title等既是属性,也是特性。修改属性,其对应的特性会发生改变;修改特性,属性也会改变
-
【1】修改元素特性(以title为例)
<div id=“test” title=‘123’>测试内容</div>
<script>console.log(test.title);//123
document.onclick = function(){
test.setAttribute(‘title’,‘456’);
console.log(test.title);//456 }
</script> -
【2】修改对象属性
<div id=“test” title=‘123’>测试内容</div>
<script>console.log(test.getAttribute(‘title’));//123
document.onclick = function(){
test.title = ‘456’;
console.log(test.getAttribute(‘title’));//456 }
例外
-
class和for这两个元素特性是例外,因为class和for是保留字,无法直接在对象属性中使用。所以在对象属性中,class变成了className,而for变成了htmlFor
-
【1】class
<div id=“test” class=“class1”>测试内容</div>
<script>
console.log(test.getAttribute(‘class’));//‘class1’
console.log(test.className);//‘class1’
console.log(test.class);//undefined
-
【2】for
<label id=“test” for=“input”></label>
<script>console.log(test.getAttribute(‘for’));//‘input’
console.log(test.htmlFor);//‘input’
console.log(test.for);//undefined
</script>
特殊
- style和onclick是两个特殊的特性,它们虽然有对应的属性名,但属性值与通过getAttribute()返回的值并不相同
- 【1】style
通过getAttribute()访问时,返回的style特性值中包含的是CSS文本,而通过属性来访问它则会返回一个CSSStyleDeclaration对象
<div id=“test” style=“height: 100px;width: 100px;”></div>
<script>
console.log(test.getAttribute(‘style’));//‘height: 100px;width: 100px;’//{0: “height”, 1: “width”, alignContent: “”, alignItems: “”, alignSelf: “”…}console.log(test.style);
console.log(typeof test.style);//‘object’
console.log(test.style.height);//‘100px’
</script> - 【2】onclick
如果通过getAttribute()访问,会返回相应代码的字符串。而访问onclick属性时,会返回一个javascript函数
[注意]其他事件处理程序也类似
<div id=“test” onclick = “alert(1)”>测试内容</div>
<script>
console.log(test.getAttribute(‘onclick’));//'alert(1)"
console.log(test.onclick);//‘function onclick(event) {alert(1)}’
console.log(typeof test.onclick);//‘function’
</script>
[注意]如果通过对象属性设置onclick属性,则不会有对应的元素特性
<div id=“test”>测试内容</div>
<script>
test.onclick = function(){
alert(1);
}
console.log(test.getAttribute(‘onclick’));//null
console.log(test.onclick);//‘function onclick(event) {alert(1)}’
console.log(typeof test.onclick);//‘function’
</script>
- js高级程序设计笔记 -- 属性类型以及创建对象
- script之defer、async属性--JS高级程序设计(一)
- javascript高级程序设计笔记--js数据类型
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
- js高级程序设计--匿名函数和闭包理解
- JS高级程序设计第2章--精简版
- JS高级特性(一)
- 笔记:js高级程序设计第四章
- JS高级程序设计第三版——在HTML中使用JavaScript
- JS高级中的实例对象的__proto__属性和构造函数的prototype属性是否指向同一对象?
- JavaScript高级程序设计(第3版)学习笔记5 js语句
- js创建对象的几种方法---js的高级程序设计
- js中offsetHeight、clientHeight、scrollHeight等相关属性区分总结
- JS高级 03-01 语法-区分大小写
- JS高级程序设计——第11章 DOM扩展 11.3 HTML5
- 指定HTML标签属性 |Specifying HTML Attributes| 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
- JS中创造构建函数的方法——阅读js高级程序设计
- js高级程序设计笔记5---BOM对象
- javascript 高级程序设计(一) 正则表达 RegExp实例属性
- JS高级程序设计2nd部分知识要点3