javascript 变态的节点集合

节点集合 by 司徒正美

#aaa {
padding:10px;
border:1px solid red;
}
p {
border:1px solid blue;
}

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
for(var i=0,n=c.length;i

司徒正美

司徒正美

司徒正美

司徒正美

司徒正美

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

如果预先将nodeList转换为数组就没有问题!


代码如下:

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
var arr = [];
for(var i=0,n=c.length;i<n;i++){
arr.push(c[i])
}
for(var i=0,n=arr.length;i<n;i++){
alert(arr[i] + " "+ i)
d.appendChild(arr[i])
}
div.parentNode.replaceChild(d,div)
}

节点集合 by 司徒正美

#aaa {
padding:10px;
border:1px solid red;
}
p {
border:1px solid blue;
}

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
var arr = [];
for(var i=0,n=c.length;i

司徒正美

司徒正美

司徒正美

司徒正美

司徒正美

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

很显然nodeList还一些奇怪的特性是数组没有的。从运行框2中,我们可以看到把节点appendChild到文档碎片时,其实会把它从DOM树中剥离出来,nodeList一定是跟踪这变化,动态改变了它自身,而直线递加的i是无法对应正确的节点的索引!因此我们每次取得它的firstChild就行了。


代码如下:

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
while(c.length) d.appendChild(c[0])//每次只取它第一个节点,直到取空
div.parentNode.replaceChild(d,div)
}

变态的childNodes by 司徒正美

#aaa {
padding:10px;
border:1px solid red;
}
p {
border:1px solid blue;
}

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
while(c.length) d.appendChild(c[0])//每次只取它第一个节点,直到取空
div.parentNode.replaceChild(d,div)
}

司徒正美

司徒正美

司徒正美

司徒正美

司徒正美

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

顺便一提,由getElementsByTagName取得的HTMLCollection也是这个样子,因此处理这类节点集合要打起十二分精神了!

HTMLCollection by 司徒正美

#aaa {
padding:10px;
border:1px solid red;
}
p {
border:1px solid blue;
}

window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = document.getElementsByTagName("p")
for(var i=0,n=c.length;i

司徒正美

司徒正美

司徒正美

司徒正美

司徒正美

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这两种节点集合在各浏览器还实现得不太一样,如标准浏览器我们可以用Array.prototype.slice.call将它们转换为原生数组,IE则报错。标准浏览器的它们有hasOwnProperty与valueOf,而IE是没有的……

(0)

相关推荐

  • js获取Treeview选中的节点(C#选中CheckBox项)

    方法网上有很多,试了一下都有瑕疵.最后找了个看上去代码比较少,比较顺眼的,测试结果报错说有几个函数不存在,于是设置断点调试,各个属性查找有用的字段,终于找到. 现整理如下: 首先,要想在javascript中获取treeview中带checkbox的节点,需要设置treeview节点的某些属性,我是在后台代码中添加的. 复制代码 代码如下: TreeNode newNode = new TreeNode(); newNode.Text = "showText"; newNode.Val

  • javascript 节点排序 2

    复制代码 代码如下: //灵感来自 //http://www.cnblogs.com/jkisjk/archive/2011/01/28/array_quickly_sortby.html var hasDuplicate = false; var sortBy = function(nodes){ var result = [], array = [], n = nodes.length, i = n, node; while(node = nodes[--n]){ (array[n] = n

  • javascript 节点排序实现代码

    在IE中我们可以利用sourceIndex,标准浏览器我们可以用compareDocumentPosition,但对于旧一点的标准浏览器呢?XML呢?因此我们就需要根据一个节点的属性确定它与另一个节点的关系了. 我的思路很简单,如果它们相同,返回0(用于去重),如果它们的父节点相同,那么根据nextSibling确定两者的先后顺序,否则就找到其最近公共祖先与其他两个最接近这祖先的两个父节点(人性点说,是伯父与父亲),这时不就是与父节点相同的情况吗?!根据nextSibling确定它们的顺序,它们

  • 初学js 新节点的创建 删除 的步骤

    特羡慕写出这些特效的高级程序员.我想学习,可总是不知道怎么去思考,不知道怎么去逻辑.有时候也很着急,这些都不怕,幸好还有人教我,指点我,这是我比较幸运的.但是我过不了自己这关了,自己最大的缺点就是 逃避,不会做的就放弃了,不会了就不会了,也不敢问了.改,这个大缺点一定得改.以下,是洋哥指点我的学习技巧,思路清晰,效率也有很大的提高..废话就不扯了,言归正传: 题目:btton 按钮 一个添加 一个删除 ,点击添加按钮就会添加一个节点,点击删除按钮就会删除最后一个节点,添加的新元素点击一下就会被删

  • javascript中节点的最近的相关节点访问方法

    在javascript中对文档中每个节点都有 parentNode--父节点 firstChild--第一个子节点 lastChild--最后一个子节点 previousSibling--紧挨着的前面的兄弟节点 nextSibling--紧挨着的后面的兄弟节点 五个相关的节点,这些节点可以不存在,为null.例如document就不包含父节点,文本节点(TextNode)就不包含子节点. 这样就可以作短途旅行,访问当前节点的某些相关节点. 另外还有childNode[](包含所有的子节点)和ch

  • javascript学习笔记(十九) 节点的操作实现代码

    本节要用到的html例子 复制代码 代码如下: <ul id="myList"> <li>项目一</li> <li>项目二</li> <li>项目三</li> </ul> 1.创建元素节点 document.createElement() 方法 用于创建元素,接受一个参数,即要创建元素的标签名,返回创建的元素节点 复制代码 代码如下: var div = document.createEle

  • jQuery:节点(插入,复制,替换,删除)操作

    复制代码 代码如下: <html> <head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>jQuery插入,复制.替换和删除节点</title> <script type="text/javascript" src="jquery-1.3.2.js&q

  • Javascript的各种节点操作实例演示代码

    代码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=" http://www.w3.org/1999/xhtml"> <head> <title="

  • javascript 变态的节点集合

    节点集合 by 司徒正美 #aaa { padding:10px; border:1px solid red; } p { border:1px solid blue; } window.onload = function(){ var d = document.createDocumentFragment(); var div = document.getElementById("aaa"); var c = div.childNodes; for(var i=0,n=c.lengt

  • 在javascript中关于节点内容加强

    一.元素节点 复制代码 代码如下: //测试元素节点,输出节点名称,节点的类型,节点的值  var liElements=document.getElementsByTagName("li");  for(var i=0;i<liElements.length;i++){     alert(liElements[i].nodeName);     alert(liElements[i].nodeType);     alert(liElements[i].nodeValue);

  • jQuery与原生JavaScript选择HTML元素集合用法对比分析

    本文实例讲述了jQuery与原生JavaScript选择HTML元素集合用法.分享给大家供大家参考,具体如下: 通过调用document.getElementsByTagName, document.getElementsByName以及document.getElementsByClassName(部分浏览器不支持),可以返回HTMLCollection对象.表面上,它们与数组很类似,因为它们都包含length属性并且元素都可以通过[index]方式访问.然而,实际上它们并不是数组:诸如pus

  • javascript将DOM节点添加到文档的方法实例分析

    本文实例讲述了javascript将DOM节点添加到文档的方法.分享给大家供大家参考.具体如下: 这里对两种方法进行了比较:第一种:先创建所有节点,再添加到文档方式的运行时长:第二种:先向文档添加一个空容器,然后每创建一个节点,再添加到容器中方式的运行时长,从测试来看,第二种方法优于第一种! 运行效果如下图所示: 具体代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-eq

  • javascript删除元素节点removeChild()用法实例

    本文实例讲述了javascript删除元素节点removeChild()用法.分享给大家供大家参考.具体分析如下: 操作DOM节点的方法:removeChild(),移除子节点,那么可以变通一下来实现移除指定的节点,我们可以先去找到要删除节点的父节点,然后在父节点中运用removeChild来移除我们想移除的节点. function removeElement(_element){ var _parentElement = _element.parentNode; if(_parentEleme

  • Javascript removeChild()删除节点及删除子节点的方法

    下面给大家介绍Javascript removeChild()删除节点的方法,具体详情如下所示: 在Javascript中,只提供了一种删除节点的方法:removeChild(). removeChild() 方法用来删除父节点的一个子节点. 语法: parent.removeChild(thisNode) 参数说明: 参数 说明 thisNode 当前节点,即要删除的节点 parent 当前节点的父节点,即 thisNode.parentNode 例如,删除 id="demo" 的节

  • JavaScript针对网页节点的增删改查用法实例

    本文实例讲述了JavaScript针对网页节点的增删改查用法.分享给大家供大家参考.具体分析如下: 一.基本概念 这部分也就是所谓的"HTML DOM",所谓HTML DOM也就是Web页面加载规则,是一个规则,也就是网页组成的基本公式. 也就是所有网页都必须按照:<html><body></body></html>--的规则编写,也按照这样的规则加载. 所谓的"网页节点",也叫"DOM节点"的通俗

  • Javascript实现的Map集合工具类完整实例

    本文实例讲述了Javascript实现的Map集合工具类.分享给大家供大家参考.具体如下: var Map = function(){ // 构造entry实体 var Entry = function(key, value){ this.key = key; this.value = value; } this.entries = new Array(); // 构造put方法在数组中放入一个Entry this.put = function(key, value){ // 数组中已存在就不放

  • JavaScript中访问节点对象的方法有哪些如何使用

    JavaScript中访问节点对象的方法有哪些? 复制代码 代码如下: var obj = document.getElementById('fdafda'); var obj = document.f1; obj.method="post"; obj.action='Bb'; var obj = document.f1.userName; var obj = document.forms[0].userName; var obj = document.forms[0].element

  • DevExpress获取节点下可视区域子节点集合的实现方法

    递归获取节点是很多程序项目中常见的技巧.本文就以实例展示了DevExpress获取节点下可视区域子节点集合的实现方法.分享给大家供参考之用,具体方法如下: 关键部分代码如下: /// <summary> /// 向下递归TreeListNode节点 /// </summary> /// <param name="node">需要向下递归的节点</param> /// <param name="conditionHanlde

随机推荐