对Dom数结构的理解,对用js操作html元素有很大的意义

先来看一下下面这段html代码:(这里就以分析body中的元素来解释,因为我们基本所有的操作基本都围绕body标签来做的)

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
window.onload = function () {
var _body = document.getElementsByTagName("body")[0];
for (var i = 0; i < _body.childNodes.length; i++) {
console.log("第"+i+"个标签:"+_body.childNodes[i].nodeName);
}
}
</script>
</head>
<body>
<input type="text" name="txt" value="" /><!--注释-->
<a href="http://www.baidu.com">content</a><span></span>
<div style="border:solid red 1px;"></div>
</body>
</html>

第一眼的感觉,body中只有四个标签<input> <a> <span> <div>

而我们用firefox浏览器打开这个html页面,F12开发工具查看页面得元素信息也正是我们所看到的 其他浏览器看到的也基本类似(除IE)

但控制台中打印的内容发现却跟我们想象的并不一样,打印结果是9个元素 其中#text为文本 #comment为注释

如下图

此时用IE打开查看html结构

针对上面的浏览器在解析html元素后可用用下图来解释

由此可以得出结果,浏览器会将 文本 注释也会解释为一个元素节点

值得注意的是:

1、浏览器解析后,</body>之前必有一个#text节点

2、写在body标签后面的所有标签(包括文本及注释),浏览器解析后都会将这些标签放入body中。

用IE开发人员工具来解释以上注意的两点

html代码:

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
window.onload = function () {
var _body = document.getElementsByTagName("body")[0];
for (var i = 0; i < _body.childNodes.length; i++) {
console.log("第"+i+"个标签:"+_body.childNodes[i].nodeName);
}
}
</script>
</head>
<body><a href="#"></a><br /></body>
</html>
<script></script>
<!--注释-->

IE输出结果

但是开发中我们一般会忽略文本元素节点和注释元素节点,简单介绍下过滤掉这些标签的一种方式:

Dom对象中,每个标签元素对象都有一个nodeType属性,分别对应的值如下

标签节点的类型: 1
文本节点的类型: 3
注释节点的类型: 8

code:

var _body = document.getElementsByTagName("body")[0];
for (var i = 0; i < _body.childNodes.length; i++) {
if (_body.childNodes[i].nodeType == 1) {
console.log("第" + i + "个标签:" + _body.childNodes[i].nodeName);
} }

js Dom树结构分析的更多相关文章

  1. JS DOM 来控制HTML元素

    JS DOM 来控制HTML元素 (ps:这个有很多方法,挑一些详解,嘻嘻) 1.getElementsByName():获取name. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  2. JS DOM属性+JS事件

    DOM属性 console.log(ele.attributes) 获取ele元素的属性集合 ele.attributes.getNamesItem(attr).nodeValue 获取指定属性值 e ...

  3. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  4. 货架工程项目之js dom实现项目工程进度图

    笔者最近要负责有个项目工程网站的安装进度过程,实现的效果要求大概如下图所示 由于笔者没有参与到数据库的制作,得知他们这个项目设计工序的时候就一个开始日期的和完成日期,连整个项目的安装结束时间都没有简直 ...

  5. js DOM优化相关探索

    我在这尝试两个方面:-->DOM与js -->DOM与浏览器 (最近在秒味视频上学到不少,哈哈哈) 一.DOM与js 1.js与dom的交互问题 频繁的与dom交互,是一件浪费时间与金钱的 ...

  6. basket.js 源码分析

    basket.js 源码分析 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此 ...

  7. js DOM的几个常用方法

    <div id="div1">这是个测试</div> <p </p> <p </p> //js DOM的几个常用方法 / ...

  8. JS Dom节点操作demo!

    通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...

  9. Js DOM 详解

    DOM事件类 基本概念 DOM事件的级别 1.DOM0 element.onclick = function(){} 2.DOM2 element.addEventListener("cli ...

随机推荐

  1. linux之cut用法

    转载:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. ...

  2. CodeForces 573A Bear and Poker

    题目链接:http://codeforces.com/problemset/problem/573/A 题目大意:此题要求一组数中的元素乘以2或者乘以3后得到的数都一样,其实就是判断这些数除去2和3这 ...

  3. HTML5与CSS3权威指南.pdf3

    表单验证 <input name="text" type="text" required pattern="^\w.*$"> r ...

  4. HW4.18

    public class Solution { public static void main(String[] args) { System.out.println("Graph 1&qu ...

  5. Python运行机制

    闲来无事,简单画了一下Python的运行机制,纯属娱乐:

  6. 【转】tmux入门指南

    按照官方说明,tmux是一个终端复用软件.我接触tmux也就是这几天的事情,但已经发现其强大.作为一个文艺程序员,有必要向大家分享一下,这么好的东东怎敢藏着掖着. 先用起来再说 假设你已经装好tmux ...

  7. Python自动化之session

    request.body 所有请求内容的原生数据 request.META 所有请求头的原生数据 cookie返回存在于响应头里面 session session是保存在服务端的键值对 cookie和 ...

  8. 圣诞节来了,雪花纷飞的CSS3动画,还不首页用起来

    圣诞节来了,冬天来了,怎么可以没有雪花纷飞效果,昨天下班前折腾了一会儿,弄了个雪花纷飞的实例,有兴趣的可以交流分享下. 原文链接:http://www.html5think.com/article/i ...

  9. MVC-控制器向View传值的三种方法

    1.提供视图模型对象 你能把一个对象作为View方法的参数传递给视图. public ViewResult Index() { DateTime date = DateTime.Now; return ...

  10. MetaData Lock 杨奇龙 ---MYSQL博客专家

    http://blog.itpub.net/22664653/viewspace-1791608/ http://blog.csdn.net/dba_waterbin/article/details/ ...