详解JS获取HTML DOM元素的8种方法


Posted in Javascript onJune 17, 2017

什么是HTML DOM

文档对象模型(Document Object Model),是W3C组织推荐的处理可扩展置标语言的标准编程接口。简单理解就是HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。我们用JavaScript对网页进行的所有操作都是通过DOM进行的。

这篇文章不做深入研究,只把各种用法和坑做一个总结。

JS获取DOM元素的方法(8种)

  1. 通过ID获取(getElementById)
  2. 通过name属性(getElementsByName)
  3. 通过标签名(getElementsByTagName)
  4. 通过类名(getElementsByClassName)
  5. 获取html的方法(document.documentElement)
  6. 获取body的方法(document.body)
  7. 通过选择器获取一个元素(querySelector)
  8. 通过选择器获取一组元素(querySelectorAll)

我们开始逐一讲解。

1.通过ID获取(getElementById)

document.getElementById('id')

用法:

1.上下文必须是document。

2.必须传参数,参数是string类型,是获取元素的id。

3.返回值只获取到一个元素,没有找到返回null。

坑~~坑坑~坑坑~坑坑~:

1.如果有多个id存在只获取第一个,也就是最先出现的哪一个。一般情况也不会出现同一个ID在页面上出现两次。

2.在IE6、7中会把表单元素的name当做ID值获取到。所以大家在定义这些的时候一定要注意。

3.在IE6、7中不区分大小写。

4.可以直接用元素的ID代表这个元素。(项目中不推荐)

5.通过ID获取元素的上下文只能是document。为什么上下文必须是document呢,因为getElementById这个方法在Document类的原型上,也许你没有听懂,那就继续往下看。

2.通过name属性(getElementsByName)

document.getElementsByName('name')

用法:

1.上下文必须是document。

2.必须传参数,参数是是获取元素的name属性。

3.返回值是一个类数组,没有找到返回空数组。

坑~~坑坑~坑坑~坑坑~:

1.获取的结果是一个类数组,不是数组。

2.在IE浏览器中只能获取到表单元素,当然我们一般也只用它获取表单元素,从ie10开始可以不只是表单元素。

3.上下文只能是document,原因同getElementById。

3.通过标签名(getElementsByTagName)

document.getElementsByTagName('p');
var oDiv = document.getElementById('divId');
oDiv.getElementsByTagName('p');

用法:

1.上下文可以是document,也可以是一个元素,注意这个元素一定要存在。

2.参数是是获取元素的标签名属性,不区分大小写。

3.返回值是一个类数组,没有找到返回空数组。

坑~~坑坑~坑坑~坑坑~:

1.获取的结果是一个类数组。

2.上下文不必须是document了,因为getElementsByTagName方法在不仅在Document类的原型上也在Element类的原型上,所以document和元素都可以使用这个方法。如果还不懂我在文章最后会再解释一下。

4.通过类名(getElementsByClassName)

用法(和getElementsByTagName类似):

1.上下文可以是document,也可以是一个元素。

2.参数是元素的类名。

3.返回值是一个类数组,没有找到返回空数组。

坑~~坑坑~坑坑~坑坑~:

1.获取的结果是一个类数组。

2.IE8以及以前版本不兼容。真可惜这么好用的方法不兼容。

5.获取html的方法(document.documentElement)

document.documentElement是专门获取html这个标签的。

6.获取body的方法(document.body)

document.body是专门获取body这个标签的。

7.通过选择器获取一个元素(querySelector)

用法:

1.上下文可以是document,也可以是一个元素。

2.参数是选择器,如:"div .className"。

3.返回值只获取到一个元素。

坑~~坑坑~坑坑~坑坑~:

这个方法不兼容IE7以及以前版本,现在似乎也没有考虑IE7兼容的公司了。

8.通过选择器获取一组元素(querySelectorAll)

用法同querySelector类似:

1.上下文可以是document,也可以是一个元素。

2.参数是选择器,如:"div .className"。

3.返回值是一个类数组。

坑~~坑坑~坑坑~坑坑~:

同querySelector,不兼容IE7。

使用原生JS获取DOM元素的8个方法讲完了,接下来在讲一下为什么有的方法只能在document上使用。

拿div举栗子,div是HTMLDivElement类的一个实例,document是HTMLDocument 的实例。

他们的继承关系:

HTMLDivElement > HTMLElement > Element > Node > EventTarget

HTMLDocument > Document > Node > EventTarget

我们都知道子类继承父类,子类就可以使用父类的属性和方法。

他们相同的继承关系是Node和EventTarget,也就是说他们都可以使用Node和EventTarget上的方法。

如Node上的nodeName、parentNode等,和EventTarget上的addEventListener等。

getElementById只在Document类的原型上,HTMLDivElement 没有继承Document类,所以div不能使用getElementById方法。
getElementsByTagName即在Document类的原型上也在Element类的原型上,所以div和document都可以使用getElementsByTagName方法。

其它同理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript读取中文cookie时的乱码问题的解决方法
Oct 14 Javascript
常用Extjs工具:Extjs.util.Format使用方法
Mar 22 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
Mar 11 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
Jun 25 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
node.js中的url.resolve方法使用说明
Dec 10 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
再谈JavaScript线程
Jul 10 Javascript
Vue.js组件高级特性实例详解
Dec 24 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
详解微信小程序之scroll-view的flex布局问题
Jan 16 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
JavaScript输入框字数实时统计更新
Jun 17 #Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
Jun 17 #Javascript
bootstrap paginator分页前后台用法示例
Jun 17 #Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 #Javascript
深入理解Webpack 中路径的配置
Jun 17 #Javascript
详解Vue组件之间的数据通信实例
Jun 17 #Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 #Javascript
You might like
理解PHP5中static和const关键字的区别
2007/03/19 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
5个javascript的数字格式化函数分享
2011/12/07 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
js星星评分效果
2014/07/24 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python日志logging模块使用方法分析
2019/05/23 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
C++面试题:关于链表和指针
2013/06/05 面试题
后勤副校长自我鉴定
2013/10/13 职场文书
财务会计应届生求职信
2013/11/24 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
申论倡议书范文
2014/05/13 职场文书
公司借条范本
2015/05/25 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Win11 BitLocker 驱动器加密
2022/04/19 数码科技