javascript DOM的详解及实例代码
发布时间 - 2026-01-10 23:27:02 点击率:次javascript DOM 总结

一直以为DOM(文档对象模型)是JS中最简单的一部分。不可否认,它确实很简单,因为DOM的思维模式有点固定,只需要简单地记住一些固定的方法,所以DOM可以说是所有js(这里指的是客户端的js)入门的起手点。
最近我在做一些有用到DOM的练习时,发现自己的DOM知识非常零散(一直以为掌握的很好),可能有很多朋友都觉得,DOM嘛,也就调用调用几个方法,或者我直接使用jQuery,根本不用考虑DOM的细节。是,这也没错,jQuery对DOM的封装可谓前无古人,但是正如成长一样,跑之前是一定要会走的,所以我认为对DOM必须要有比较详细的了解,于是我总结了如下的关于DOM的一些使用方法。
在W3C总结跪DOM规范中,有一些十分常用的,也有些不怎么有用的,这里我们主要讨论常用一些DOM操作(有关DOM的基本概念在此就不介绍了):
节点层次
所谓节点层次,指的是html文档中存在具有各自特点,数据,方法的节点(例如标签),节点之间的关系构成了层次(其实可以想象成树状结构)。W3C的DOM1级规范中定义了一个NODE接口。这个接口有一些方法是非常有用的:
Node.ELEMENT_NODE;(元素节点)
Node.TEXT_NODE;(文本节点)
Node.DOCUMENT_NODE(文档节点)
而每个节点都有自己的节点类型标志,也就是NodeType属性,例如元素节点的nodeType == '1';文本节点的nodeType == '3';文档节点的nodeType == '9';
1.文档节点
文档节点在一个文档中用document对象表示,它的基本特征如下:
console.log(document.nodeType); // 9 console.log(document.nodeName); // #document console.log(document.nodeValue); // null console.log(document.parentNode); // null(它已经是最顶层的节点,树的根节点)
tip one (文档的子节点):
1.document.documentElement可以取到html对象,同样可以通过document.childNodes[0]以及document.firstchild取到。然而 documentElement可以更快,更直接访问元素。
tip two (文档的相关信息):
1.取得文档标题 : document.title;
2.取得完整的url : document.URL;
3.取得域名(ip) : document.domain;
4.取得页面的URL : document.referrer;
tip three (文档查找元素):
1.通过id : document.getElementById("xxx"); 一般页面id会不同,若有多个相同id,则取到第一个有该id的元素。
2.通过tagName : document.getElementsByTagName("xxx"); 返回标签名为"xxx"的元素集合!
3.通过name : document.getElementByName();
理解document对象非常简单,兼容性做的也比较靠前。
2.元素节点
元素节点提供了对元素标签名,子节点及特性的访问。它的基本特征如下:
var ele = document.getElementById("element"); //通过document取到一个标签对象
console.log(ele.nodeType); // 1
console.log(ele.nodeName); // 返回元素的标签名
console.log(ele.nodeValue); //永远返回null!
tip one (html元素) :
<div id="myDiv" class="bd" title="Body text" lang="en" dir="ltr"></div>
var div = document.getElementById("div");
1. console.log(div.id); // "myDiv"
2. console.log(div.className); // "bd"
3. console.log(div.title); // "Body text"
4. console.log(div.lang); // "en"
5. console.log(div.dir); // "ltr"
tip two (取得,设置和删除特性):
1.div.getAttribute("id"); // "myDiv"
2.div.setAttribuye("id","yourDiv"); // id已变动
3.div.removeAttribute("id"); //id已删除
需要注意: 在IE7及以下的版本中,三种方法存在着一些异常行为,通过set设置class 和style特性,特别是事件处理程序时,没有任何效果,get也是同样的。因此一般开发要避免以上三种方法,推荐通过属性来设置特性。
tip three (元素的子节点) :
要重点提一下的就是这里了,有如下代码:
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
var mL = document.getElementById("myList");
//很明显mL对象有三个元素节点,我们也知道用childNodes属性去找到节点数,然而陷阱随之而来
console.log(mL.childNodes); // 7
//?!怎么会有7个?
//原因在于childNodes中不仅包含了元素节点,还有4个文本节点。因此需要过滤
for(var i=0,len=ml.childNodes.length;i<len;i++){
if(ml.childNodes[i].nodeType == "1"){ // 利用元素节点的特性
// ....
}
}<br>//最好的方法可以这么做<br>//如果元素对象内部标签名是一样的<br>var items = ml.getElementsByTagName("li"); //能得到三个li节点对象
3.文本节点
文本节点包含的是可以照字面解释的纯文本内容,纯文本中可以包含转义后的HTML字符,但不能包含HTML代码。文本节点的基本特征如下:
<div id="myDiv">123</div>
var myDiv = document.getElementById("myDiv") //取到元素节点
var tx = myDiv.childNodes[0] //前面也提过childNodes的特性,这次取到了文本节点
console.log(tx.nodeType) // 3
console.log(tx.nodeName) // 所有文本节点的nodeName都是"#text";
console.log(tx.nodeValue) // 123(节点包含的文本),注意元素节点是不能取到它包含的文本节点的文本的
//所以其父节点显然是个元素节点.
Tip one :
创建文本节点的两个方法:document.createTextNode(),document.createText();
创建好后不会直接嵌入文档中,需要引用。
var a = document.createElement("p");
var b = document.createTextNode("123");
a.appendChild(b);
document.body.appendChild(a);
这样在body末尾会出现<p>123</p>这样的标签
个人认为DOM肯定是学习js的入门点,但是也需要很长时间的打磨。我看了DOM不少于三遍,仅仅是DOM1级规范,每次都有些新东西。如果你学习DOM,那么就一定要注意一些陷阱,同时也要多花时间琢磨。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JS
# DOM
# javascript
# DOM的详解
# DOM实例
# 如何用js判断dom是否有存在某class的值
# 详解Javascript中DOM的范围
# js 数据存储和DOM编程
# js常用DOM方法详解
# Javascript DOM事件操作小结(监听鼠标点击、释放
# 悬停、离开等)
# 原生JS和jQuery操作DOM对比总结
# 原生JS实现几个常用DOM操作API实例
# javascript事件捕获机制【深入分析IE和DOM中的事件模型】
# JS访问DOM节点方法详解
# 文档
# 自己的
# 三种
# 指的是
# 一直以为
# 部标
# 的是
# 都是
# 几个
# 是个
# 如果你
# 都有
# 很好
# 会有
# 我在
# 最好的
# 也就
# 多个
# 在此
# 也要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
专业商城网站制作公司有哪些,pi商城官网是哪个?
利用vue写todolist单页应用
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何用景安虚拟主机手机版绑定域名建站?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
如何快速搭建高效服务器建站系统?
Laravel如何使用withoutEvents方法临时禁用模型事件
中山网站推广排名,中山信息港登录入口?
Laravel如何处理和验证JSON类型的数据库字段
微信小程序 scroll-view组件实现列表页实例代码
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
JS弹性运动实现方法分析
微信小程序 input输入框控件详解及实例(多种示例)
JavaScript如何实现错误处理_try...catch如何捕获异常?
浅谈javascript alert和confirm的美化
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
免费视频制作网站,更新又快又好的免费电影网站?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何用IIS7快速搭建并优化网站站点?
如何快速搭建二级域名独立网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
实例解析Array和String方法
海南网站制作公司有哪些,海口网是哪家的?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
高性价比服务器租赁——企业级配置与24小时运维服务
如何用y主机助手快速搭建网站?
简单实现jsp分页
如何基于云服务器快速搭建个人网站?
如何快速搭建高效WAP手机网站?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站制作报价单模板图片,小松挖机官方网站报价?
jQuery 常见小例汇总
微信小程序 五星评分(包括半颗星评分)实例代码
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
详解Oracle修改字段类型方法总结
如何快速搭建安全的FTP站点?
如何续费美橙建站之星域名及服务?
详解jQuery中基本的动画方法
Laravel怎么调用外部API_Laravel Http Client客户端使用
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】

