在用DOM操作控制HTML时,很多初学者会把 点操作符+属性名 与getAttribute("属性名") 混淆,误以为这两种方法是等价的。

实际上,

  • 通过getAttribute("属性名")和setAttribute("属性名","属性值") 可以获取或修改标签上的属性值
  • 通过 点操作符+属性名 可以获取或修改元素对应的DOM对象的属性值

这两种方法并不相同,不可混为一谈

举个栗子:
HTML代码:
```

妙音天女

```
JS代码:
```
var myname=document.getElementById("name");//myname是HTMLParagraphElement类型的DOM对象

console.log(myname.title);//名字 //HTMLParagraphElement具有title属性(继承自父类HTMLElement)
console.log(myname.getAttribute("title"));//名字 //p标签具有title属性(html标签的全局属性) console.log(myname.align);//left //HTMLParagraphElement具有align属性
console.log(myname.getAttribute("align"));//left //p标签具有align属性 console.log(myname.test);//undefined//HTMLParagraphElement类型的myname对象没有test属性
console.log(myname.getAttribute("test"));//测试 //此处的p标签具有自定义的test属性 console.log(myname.innerHTML);//妙音天女 //HTMLParagraphElement具有innerHTML属性(继承自祖父类Element)
console.log(myname.getAttribute("innerHTML"));//null //p标签没有innerHTML属性 myname.hi="hello";
console.log(myname.hi);//hello //myname对象具有hi属性
console.log(myname.getAttribute("hi"));//null //p标签没有hi属性
我们可以清晰地看到,
- 对于HTML标签和相应的DOM对象都具有的属性(如例子中的title属性和align属性),两种方法取得的值是相同的
- 对于HTML标签具有而DOM对象不具有的属性(通常是标签上的自定义属性,如例子中的test属性,或data-* 属性),getAttribute()可以取得相应的属性值,但点操作符返回undefined
- 对于DOM对象具有而HTML标签不具有的属性(如例子中的innerHTML和对象上自定义的hi属性),点操作符可以取得相应的属性值,但getAttribute()返回null 注:p标签对应的DOM类型是HTMLParagraphElement,其父类型是HTMLElement,详见我的另一篇博客:[HTMLElement](http://www.cnblogs.com/xuehaoyue/p/6638196.html)

最新文章

  1. Beginners Guide To Web Development
  2. Visual Studio中安装viemu后,vim vax 快捷键大全
  3. fastjson格式化bean的简易属性过滤器
  4. ASP.net 上传
  5. [图论]Dijkstra 算法小结
  6. Ethernet & IEEE 802.3 802.X 802.1ag-MEP
  7. Django 1.6 的测试驱动开发
  8. LogLog
  9. 开玩笑Web它servlet(五岁以下儿童)---- 如何解决servlet线程安全问题
  10. 添加事务后 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type available
  11. es6零基础学习之项目目录创建(一)
  12. Tomcat多域名访问
  13. Filter过滤器 不登陆无法访问其他页面
  14. 为什么Firefox在SSH上这么慢?
  15. Android学习系列(17)--App列表之圆角ListView(续)
  16. MongoDB的学习--索引类型和属性(转)
  17. Spark 准备篇-基本原理
  18. MongoDB pymongo模块 删除数据
  19. Docker配置mysql互为主从
  20. java 文件过滤

热门文章

  1. 远程推送-----iOS
  2. c#访问数据库的两种方法以及事务的两种方法
  3. ZooKeeper的注意事项
  4. [TPYBoard-Micropython之会python就能做硬件 5] 学习使用重力传感器及PWM
  5. C++待解
  6. 纪中集训 Day 5
  7. c++中,int *a=new int(120)语句的意思
  8. 前端项目经验总结之js防缓存(避免缓存的影响)
  9. InstallShield打包
  10. USTC 1119 graph 图的同构