区分 点操作符+属性名 和 getAttribute()
在用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)
区分 点操作符+属性名 和 getAttribute()的更多相关文章
- HTMLParser获取属性名
HTMLParser获取属性名方式: 原始网页文本: <a title="美军被曝虐尸" href="http://www.sogou.com/web?query= ...
- 【Js】创建对象的6种方式总结、(底部包含属性名为动态的形式)
一.new 操作符 + Object 创建对象 1 var person = new Object(); 2 person.name = "lisi"; 3 person.age ...
- js 把对象按照属性名的字母顺序进行排列
var obj = {name: "zhangsan", age: 8, ace: 5, nbme: "lisi"};//要排序的对象function objK ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- php : 获取对象的属性名
方案有多种: 一. 使用 get_object_vars() 方法 缺点: 只能显示 public 的 //只显示public的 var_dump(get_object_vars($test)); 处 ...
- C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)
既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞 ...
- [Effective JavaScript 笔记]第39条:不要重用父类的属性名
假设想给上节讲的场景图库添加收集诊断信息的功能.这对于调试和性能分析很有用. 38条示例续 给每个Actor实例一个唯一的标识数. 添加标识数 function Actor(scene,x,y){ t ...
随机推荐
- uml系列(六)——行为图:活动&状态
说完uml的静态图了,说一下uml的动态的表示吧. uml的行为图,uml的行为图主要用来设计程序的行为.还是老规矩,先来张图: 行为图包含活动图和状态图两种. 先来说下活动图:活动图是由活动的节点和 ...
- 矩阵求逆的几种方法总结(C++)
矩阵求逆运算有多种算法: 伴随矩阵的思想,分别算出其伴随矩阵和行列式,再算出逆矩阵: LU分解法(若选主元即为LUP分解法: Ax = b ==> PAx = Pb ==>LUx = Pb ...
- Javascript面对对象. 第三篇
3.字面量 为了让属性和方法很好的体现封装的效果,并且减少不必要的输入原型的创建可以使用字面量. function Box(){} //使用字面量的方法创建原型对象,这里的{}就是对象,是Object ...
- H5常见的兼容问题及解决
最近这两天经常遇到一些麻烦的兼容问题,统一整理一下,比较简单也不是特别全面,希望大家多多交流. 几种IE6 bug的解决方法 1)png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也 ...
- win8配置JDK
有很多新手朋友对win7 和win8里的环境变量不是很熟悉,下面我整理了一下: 首先要说一下,win7里和win8配置方法是相同的,配置之前先去百度一下 JDK 然后找到自己电脑系统对应的jdk版本下 ...
- 纪中集训 Day 8 & Last Day
好吧回到家一直玩到现在才来写冏= = 然后今天终于在最后一场比赛中AK了= = 虽然有两人AK,另一个是初二牛ORZ 其实都是水题+模板题 第一题是DP,第二题是模拟,第三题是可持久化TREAP(其实 ...
- ios常用资源网址链接
M了个J博客 http://www.cnblogs.com/mjios/tag/objective-c/ Cocoa China http://www.cocoachina.com git网 ht ...
- Javascript匿名函数
单独的匿名函数无法运行,就算能运行,也无法调用.解决办法如下: 法1. //把匿名函数赋值给变量 var box=function(){ return "Lee"; }; aler ...
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...