JavaScript DOM节点和文档类型
以下的例子以此HTML文档结构为例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <div id="demo">
<ul id="contents">
<li id="li_1"></li>
<li id="li_2"></li>
<li id="li_3"></li>
</ul><p id="p_1"></p><p id="p_2"></p>
</div> <script type="text/javascript" src="javascript_dom_1.js"></script>
</body>
</html>
获得子节点的集合:childNodes()
var ul = document.getElementById("contents");
for(var i= 0 ; i < ul.childNodes.length; i++){
if(ul.childNodes[i].nodeType == "1"){
console.log(ul.childNodes[i].id);
}
}
运行结果:
li_1
li_2
li_3
判断的节点的类型用 nodeType,下面列出一个表格表示不同类型的对应不同的值(常用):
| 类型 | 值 |
|---|---|
| element | 1 |
| text | 3 |
| comment | 8 |
| document | 9 |
上面的例子中,节点包括text类型和element类型,所以要判断一下是否是element类型。
获得元素的父节点:parentNode()
var li = document.getElementById("li_1");
console.log(li.parentNode.id);
运行结果:
conments
获得相邻同胞节点
previousSibling : 获得上一个同胞节点
nextSibling : 获得下一个同胞节点
var p1 = document.getElementById("p_1");
console.log(p1.previousSibling.id);
console.log(p1.nextSibling.id);
运行结果:
contents
p_2
我们看一下html代码,为什么<p>标签要放在ul后面,这里是为了方便测试,IE和其他浏览器在这里表现不同,对于其他浏览器,ul的子元素其实是有7个,而IE是3个,我们看到的确实是只有3个li,其他浏览器把li与li之间的换行视为有一个text节点,所以就有了7个节点。
获得首尾子节点
firstChild:获得第一个子节点
lastChild:获得最后一个子节点
<p id="demo2"><strong id="strong_1"></strong><a id="a"></a><strong id="strong_2"></strong></p>
var p = document.getElementById("demo2");
console.log(p.firstChild.id);
console.log(p.lastChild.id);
运行结果:
strong_1
strong_2
判断是否有子节点:hasChildNodes()
若有子元素,返回true,否则,返回false
在子节点尾部插入节点:appendChild()
var newNode = document.createElement("div");
newNode.id = "newNode";
var getDemo = document.getElementById("demo1");
getDemo.appendChild(newNode);
console.log(getDemo.lastChild.id);
运行结果:
newNode
在子节点前面插入节点:insertBefore()
insertBefore(参数1,参数2)
- 参数1:要插入的节点
- 参数2:节点,表示在这个节点前面插入节点,若为null,则在末尾插入
var newNode = document.createElement("div");
newNode.id = "newNode";
var getDemo = document.getElementById("demo1");
getDemo.insertBefore(newNode,document.getElementById("contents"));
console.log(getDemo.childNodes[1].id);
运行结果:
newNode
替换子节点:replaceChild()
replaceChild(参数1,参数2)
- 参数1:要插入的节点
- 参数2:表示要被替换的节点
可参考insertBefore()的例子。
删除子节点:removeChild()
removeChild(参数1)
- 参数1:要删除的节点
克隆节点:cloneNode()
node.cloneNode(true|false)
- node:被克隆的节点
- 传入一个参数,如果是true,那么进行深复制(连同子节点一起复制),如果是false,那么进行浅复制,只复制节点本身。
var ul = document.getElementById("contents");
var deepClone = ul.cloneNode(true);
var shadowClone = ul.cloneNode(false);
console.log(deepClone.childNodes.length);
console.log(shadowClone.childNodes.length);
运行结果:
7
0
如果不传值,那么默认使用浅克隆。
Document类型
document的属性
- document.documentElement 指向
<html>元素 - document.body 指向
<body>元素 - document.doctype 指向
<!DOCTYPE>元素
HTMLDocument的属性
- document.title 取得文档的标题
- document.URL 取得完整的URL
- document.domain 取得域名
- document.referrer 取得来源页面的URL
查找元素
- document.getElementById(id) 按id查找,返回一个节点
- document.getElementsByTagName(tabName) 按标签名查找,返回一个集合
- document.getElementsByName(name) 按name查找,返回一个集合,此方法只有HTMLDocument类型才有
写入
- document.write()
示例:
document.write("<div>Hi,Michael!</div>");
var newNode = document.createElement("div");
newNode.innerHTML = "Hi,Michael!";
document.write(newNode.innerHTML);
以上两段代码的结果是相同的。
- document.writeln()
和write()一样,只不过会自动换行
JavaScript DOM节点和文档类型的更多相关文章
- 深入理解DOM节点类型第三篇——注释节点和文档类型节点
× 目录 [1]注释节点 [2]文档类型 前面的话 把注释节点和文档类型节点放在一起是因为IE8-浏览器的一个bug.IE8-浏览器将标签名为"!"的元素视作注释节点,所以文档声明 ...
- JavaScript中DOM节点层次Text类型
文本节点 标签之间只要有一点内容都会有文本节点,包括空格 创建文本节点document.createTextNode() 可以使用 document.createTextNode 创建新文本节点 == ...
- javascript DOM 节点 第18节
<html> <head> <title>DOM对象</title> </head><body><div >DOM对 ...
- JavaScript DOM–节点操作
节点 节点至少拥有nodeType(节点类型).nodeName(节点名称)和nodeValue(节点值)这三个基本属性. 元素节点 nodeType 为1 属性节点 nodeType 为2 文本 ...
- JavaScript DOM节点操作总结
节点类型 节点类型主要有三种:元素节点,属性节点和文本节点. 而对DOM的主要也就是围绕元素节点和属性节点的增删改查.下面就分别从对元素节点的操作和对属性节点的操作来介绍. 元素节点 查 在对DOM进 ...
- javascript DOM节点
获得子节点方式: 1.将文本内容也当成节点 childNodes firstChild lastChild 2.获得标签为内容的节点 children firstElementChild lastEl ...
- JavaScript Dom编程艺术(1)
Dom是一种可以供多种环境和多种程序设计语言使用的API: 一份文档就是一个节点树: 节电分为不同的类型:元素节点,属性节点,文档节点,元素节点分为属性节点和文档节点: getelementbyid( ...
- 深入理解DOM节点类型第四篇——文档片段节点DocumentFragment
× 目录 [1]特征 [2]作用 前面的话 在所有节点类型中,只有文档片段节点DocumentFragment在文档中没有对应的标记.DOM规定文档片段(document fragment)是一种“轻 ...
- javascript DOM中的节点层次和节点类型概述
针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 因为DOM这方面的对象方法操作性都特别强,但是逻辑很简单,所以就没有涉及到实际的 ...
随机推荐
- 华硕win10文档类文件点击右键时会闪一下,没法用右键打开文件
华硕的win10系统,把系统自带的福昕软件Foxit PhantomPDF卸载了就好了
- Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现
http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...
- CSS背景background、background-position使用详解
背景(background)是css中一个重要的的部分,也是需要知道的css的基础知识之一.这篇文章将会涉及css背景(background)的基本用法,包括诸如 background-attachm ...
- vi 的使用
Vi 分三种模式:一般模式,编辑模式,和命令模式 一般模式: 光标移动,搜索与替换,删除,复制,粘贴 编辑模式:插入或者替换文本 命令模式:读取.保存文件 一般模式 光标移动: h(左), j(下), ...
- REDHAT一总复习1 ssh配置 禁用root用户SSH连接
生成SSH公钥 $ ssh-keygen 生成的公钥安装到指定的服务器上,这里安装到desktop0上的student账户 $ ssh-copy-id desktop0 $ su - 禁用root用户 ...
- java关于压缩包的处理,我这里贴出三中格式的(zip,rar,tar)解压方法(目前只用到解压,所以压缩过多研究)。
1.首先我们先来说下为什么会有这三中格式: (1)rar格式:rar格式是最先出现的压缩方式,它主要是用于商业机构一些文件的压缩,它可以根据不同公司的要求,去设定制定不同的压缩算法,这种算法是不对外公 ...
- juqery 正则表达式的使用
juqery 正则表达式的使用test() 方法用于检测一个字符串是否匹配某个模式.js原生的方法 reg="/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8} ...
- linux 正则表达式使用
1.正则表达式概念 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式的基本元素包括普通字符和元字 ...
- Servlet和CGI的区别
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销 ...
- Hibernate之缓存的原理
一.关于缓存: 其实对于缓存而言,它其实就是一块内存空间,在这个空间中存放了相互关联的持久化对象, 也就是存在于Session缓存内的对象,那么Session负责根据持久化对象的状态变化来同步的更新数 ...