javaScript之节点操作
javaScript程序员避免不了要操作页面中的DOM,除了经常使用的:
appendChild()向childNodes列表的末尾添加一个节点。
insertBefore(),接受两个参数,要插入的节点和作为参照的节点。
replaceChild(),接受两个参数,要插入的节点和要替换的节点。
removeChild(),移除某个节点,接受一个参数,即为要删除的节点。
cloneNode(),克隆节点,接受一个布尔值,表示是否执行深复制。在参数为true情况下,执行深复制,复制其全部子节点。
我们还需要对网页中的节点进行遍历或颠倒,如下所示:
对页面节点遍历
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<title>遍历指定元素下所有类型节点</title>
<script type="text/javascript">
window.onload=function(){
var wrapper=document.getElementById("wrapper");
var content=document.getElementById("content");
var root = document.documentElement;
function findNodes(node){
var arr=[];
function done(node){
if(node.childNodes.length!=0){
var childrenNodes=node.childNodes;
for(var index=0;index<childrenNodes.length;index++){
arr.push(childrenNodes[index]);
done(childrenNodes[index]);
}
}
}
done(node)
return arr;
}
// 遍历根节点下所有节点
console.log('根节点下所有节点');
console.log(findNodes(root));
// 遍历ID为content的所有节点
console.log('ID为content的所有节点');
console.log(findNodes(content));
}
</script>
</head>
<body>
<div id="wrapper"></div>
<div id="content">
<div>
<!-- 我是注释 -->
<ul>
<li>first li</li>
<li>second li</li>
<li>third li</li>
</ul>
</div>
</div>
</body>
</html>
如果只想遍历Element类型节点,可以使用node.children。另外还可以实现对Element节点计数
function traverseNodes(node){
var countTeg = 0;
function done(node){
if(node.nodeType == 1)
countTeg++;
var childrens = node.childNodes;
for(var i=0; i<childrens.length;i++){
countTeg += done(childrens[i])
}
return countTeg;
}
return done(node);
}
颠倒页面节点
颠倒指定节点的直系子节点
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<title>遍历指定元素下所有节点</title>
<script type="text/javascript">
function reserve(node){
var children = node.childNodes;
var len = children.length;
for(var i=len-1; i>=0; i--){
var temp = node.removeChild(children[i]); //从父节点node中从后向前一次删除子节点children[i]
node.appendChild(temp); //把删除了的节点放到父节点node的末尾
}
}
</script>
</head>
<body>
<!-- 我是注释 -->
<div>
<p>第一段</p>
<p>第二段</p>
<p>第三段</p>
</div> <button onclick="reserve(document.body)">点击我</button>
</body>
</html>
颠倒指定节点的所有子孙节点
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<title>颠倒所有子孙节点</title>
<script type="text/javascript">
function reserveNode(node){ //文本节点
if(node.nodeType == 3){//颠倒文本节点
var text = node.data;
var retext = "";
for(var i=text.length-1; i>=0; i-- ){
retext += text.charAt(i);
}
node.data = retext;
}else{ //非文本节点直接颠倒节点位置
var children = node.childNodes;
var len = children.length;
for(var i = len-1; i>=0; i--){
reserveNode(children[i]);
node.appendChild(node.removeChild(children[i]));
}
} }
</script>
</head>
<body>
<!-- 我是注释 -->
<div>
<p>第一段</p>
<p>第二段</p>
<p>第三段</p>
</div> <button onclick="reserveNode(document.body)">点击我</button>
</body>
</html>
总之,灵活用于DOM的基本操作方法可以实现巨大的功能!!!
javaScript之节点操作的更多相关文章
- JavaScript DOM节点操作总结
节点类型 节点类型主要有三种:元素节点,属性节点和文本节点. 而对DOM的主要也就是围绕元素节点和属性节点的增删改查.下面就分别从对元素节点的操作和对属性节点的操作来介绍. 元素节点 查 在对DOM进 ...
- JavaScript 之 节点操作
一.文档树结构 DOM 可以将任何 HTML 或 XML 描绘成一个由多层节点构成的结构. 节点分为不同的类型,每种类型分别表示文档中不同的信息.每个节点都拥有各自的特点.数据和方法,另外也与其他节点 ...
- 前端之javascript的节点操作和Event
一 节点的增删改查 创建节点:createElement(标签名):创建一个指定名称的节点. 追加节点: 追加一个子节点:somenode.appendChild(标签名) 指定某个位置前面添加一个节 ...
- JavaScript DOM–节点操作
节点 节点至少拥有nodeType(节点类型).nodeName(节点名称)和nodeValue(节点值)这三个基本属性. 元素节点 nodeType 为1 属性节点 nodeType 为2 文本 ...
- JavaScript 节点操作Dom属性和方法(转)
JavaScript 节点操作Dom属性和方法 一些常用的dom属性和方法,列出来作为手册用. 属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储 ...
- 第一百二十六节,JavaScript,XPath操作xml节点
第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...
- JavaScript -- 节点操作, 事件触发, 表单伸缩
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 前端JavaScript之DOM节点操作
1.HTML DOM是啥 Document Object Model:定义了访问和操作HTML文档的标准方法,把HTML文档呈现为带有元素,属性和文本的树状结构 2.解析过程 HTML加载完毕,渲染引 ...
- JavaScript之DOM操作,事件操作,节点操作
1,DOM操作 1.1 概念 所谓DOM,全称Document Object Model 文档对象模型,DOM是W3C(World Wide Web Consortuum )标准,同时也定义了访问诸 ...
随机推荐
- JS中跨域问题
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- ActiveMQ消费者接收消息的过程
[http://manzhizhen.iteye.com/blog/2094130] org.apache.activemq.ActiveMQMessageConsumer同步接收
- java: Comparable比较器,定义二叉操作类
//定义二叉操作类 class BinaryTree{ class Node{ private Node left; //左指数 private Node right; //右指数 private C ...
- django 添加自定义context
文档参考;http://python.usyiyi.cn/django_182/ref/templates/api.html 添加自定义上下文文件custom_processors.py # codi ...
- 解决:pycharm连接github报错 Can't login: Received fatal alert: protocol_version
如图1,进行测试连接的时候报错了 知乎的一位网友给了答案,详情参见知乎pycharm连接github报错,如何解决? "" Github 最近升级过协议,可能是你的 JRE 或者 ...
- Uninstall Office 2016 for Mac
官方原文:https://support.office.com/en-us/article/Uninstall-Office-2016-for-Mac-eefa1199-5b58-43af-8a3d- ...
- poj 1300 欧拉图
http://poj.org/problem?id=1300 要不是书上有翻译我估计要卡死,,,首先这是一个连通图,鬼知道是那句话表示出来的,终点必须是0,统计一下每个点的度数,如果是欧拉回路那么起点 ...
- crontab 总结
crontab -e --------- linux定时任务提示-bash: crontab: command not found 执行 crontab 命令如果报 command not found ...
- C#中的线程(一)入门
C#中的线程(一)入门 Keywords:C# 线程Source:http://www.albahari.com/threading/Author: Joe AlbahariTranslator: ...
- HttpClient与Spring RestTemplate
需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...