js节点操作
在看《javascript高级程序设计》,看到节点操作这一块,觉得我只知道用appendChild(),太肤浅了,记录下学到的东西。
每个节点都有一个 parentNode 属性,该属性指向文档树中的父节点。包含在 childNodes 列表中的所有节点都具有相同的父节点,因此它们的 parentNode 属性都指向同一个节点。此外,包含在childNodes 列表中的每个节点相互之间都是同胞节点。 通过使用列表中每个节点的 previousSibling和 nextSibling 属性, 可以访问同一列表中的其他节点。 列表中第一个节点的 previousSibling 属性值为 null ,而列表中最后一个节点的 nextSibling 属性的值同样也为 null。
节点(note)之间的关系如下图:

每个节点都有一个 childNodes 属性,其中保存着一个 NodeList 对象。 NodeList 是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。请注意,虽然可以通过方括号语法来访问 NodeList 的值,而且这个对象也有 length 属性,但它并不是 Array 的实例。 NodeList 对象的独特之处在于,它实际上是基于 DOM 结构动态执行查询的结果,因此 DOM 结构的变化能够自动反映在 NodeList 对象中。我们常说, NodeList 是有生命、有呼吸的对象,而不是在我们第一次访问它们的某个瞬间拍摄下来的一张快照。
访问保存在 NodeList 中的节点,可以这样:
//获取第一个子元素
①var firstChild = someNode.childNodes[0];
②var secondChild = someNode.childNodes.item(1);
//判断元素是否包含子元素
①var count = someNode.childNodes.length;
②var isHas=someNode.hasChildNodes();
将 NodeList 对象转换为数组(对 arguments 对象使用 Array.prototype.slice() 方法可以将其转换为数组):
function convertToArray(nodes){
var array = null;
try {
array = Array.prototype.slice.call(nodes, 0); //除 IE8 及更早版本之外,这行代码能在任何浏览器中运行,
} catch (ex) {
array = new Array();
for (var i=0, len=nodes.length; i < len; i++){
array.push(nodes[i]);
}
}
return array;
}
操作节点的方法:
1.appendChild() -------someNode.appendChild(newNode)
向 someNode的childNodes 列表的末尾添加一个节点。
2.insertBefore() ---------someNode.insertBefore(newNode, someNode.firstChild)
这个方法接受两个参数:要插入的节点和作为参照的节点。插入节点后,被插入的节点会变成参照节点的前一个同胞节点
3.replaceChild() ---------someNode.replaceChild(newNode, someNode.firstChild);
接受的两个参数是: 要插入的节点和要替换的节点。
4.removeChild() ----------someNode.removeChild(someNode.lastChild);
与使用 replaceChild() 方法一样,通过 removeChild() 移除的节点仍然为文档所有,只不过在文档中已经没有了自己的位置。
5.cloneNode() -----参数可以带ture或者false,表示是否深度复制,这个方法应该很少用到,略过。
6.normalize() -------作用是处理文档树中的文本节点,也略过
操作节点的例子:
(function(){
function del_ff(elem){ //去除空节点
var elem_child = elem.childNodes;
console.log(elem_child)
for(var i=0; i<elem_child.length;i++){
if(elem_child[i].nodeName == "#text" && !/\s/.test(elem_child.nodeValue))
{elem.removeChild(elem_child[i])
}
}
}
var getElementByClassName=function(className){
var arr= new Array();
var tagArr = document.getElementsByTagName("div");
for(var i=0;i<tagArr.length;i++){
if(tagArr[i].className.indexOf(className)>-1){
arr.push(tagArr[i]);
}
}
return arr;
};
var b=getElementByClassName("czzhpf-hd-1");
var a=b[0];
del_ff(a);
var chils= a.childNodes;
chils[0].style.display="none"; //第一个子元素
chils[1].style.display="none"; //第二个子元素
chils[2].style.display="none"; //第三个子元素
})
()
js节点操作的更多相关文章
- js节点操作实例
写了一个简单的小例子来引用js实例 1. 初步节点操作: 2.兼容性节点操作: 3.节点的类型,名字: 4.使用setAttribute设置属性 5.节点复制操作: 6.删除和替换节点 如有错误,还望 ...
- JS节点操作(JS原生+JQuery)
JavaScript与JQuery节点操作 节点关系与类型 任何HTML元素,都有nodeType属性.值有1~12,常用的有: 1.元素节点 2.文本节点 8.注释节点 9.document节点 ...
- 原生JS节点操作
获取子节点 1. children 不是标准的dom属性,但是几乎被所有浏览器支持.获取子元素的元素节点(只包括元素节点) 注意:在IE中,children包含注释节点. 2. childNodes ...
- js 节点操作
添加和删除节点(HTML 元素). 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. 实例 <div id=& ...
- js 节点 document html css 表单节点操作
js 节点 document html css 表单节点操作 节点操作:访问.属性.创建 (1)节点的访问:firstChild.lastChild.childNodes.parentChild(父子 ...
- JS Dom节点操作demo!
通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...
- 原生JS和jQuery中基本的节点操作
js中节点操作**document.createElement()**用来生成网页元素节点,参数为元素的标签名: **document.createTextNode()**用来生成文本节点,参数为所要 ...
- JS DOM操作(创建、遍历、获取、操作、删除节点)
创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...
- js教程系列32 :javascript-DOM节点操作
1 DOM节点操作 1.1 创建节点 createElement() var createDiv = document.createElement("div"); 1.2 插入子节 ...
随机推荐
- sharepont 2013 隐藏Ribbon 菜单
引用:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.Web.Comma ...
- 小结一下前段时间做的rpgdemo
虽然说已经是彻底放弃继续做那个demo了(代码结构混乱,想增加新功能非常的不方便),不过还是花了一点心血在里面的,毕竟这是我开始学习unity游戏制作的初衷,不过果然是学的越多越发现自己的不足... ...
- hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- redis和memcached
Redis 1.主从配置(主从复制不会阻塞master.) 1)bind 192.168.1.2(请修改成本机的IP地址,要不然,客户端无法进行访问) 2)slaveof 192.168.1.1 6 ...
- bzoj 1079 着色方案
题目: 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其 中第i 种颜色的油漆足够涂ci 个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得 ...
- jdbc连接mysql
package june25jdbcTest; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Res ...
- tcpdump高级过滤技巧
基本语法 ========过滤主机--------- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据# tcpdump -i eth1 host 192.168.1.1- ...
- SVN服务器搭建和使用(三)
SVN服务器搭建和使用(三) 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文 ...
- html5本地存储(localStorage)使用介绍
1.html5几种存储形式 本地存储(localStorage && sessionStorage) 离线缓存(application cache) indexedDB 和 webSQ ...
- 通过js引用外部脚本(嘿嘿,方便直接在浏览器上调试抓取代码)
最近折腾爬虫,后端使用jQuery进行数据采集,一般都是先从浏览器中将采集代码调试好后直接放到后端跑了. 有些网址没有引用jQuery,那调试起来就不方便了,可以用以下代码动态添加script标签,将 ...