最近写代码时需要获取符合某些条件的节点子元素,用firstChild之类的方法会包含文本节点,所以包装了一个简单的类:

     //子元素遍历器
function ElementWalker(node) {
if(typeof node === 'string')
node = document.getElementById(node);
this.node = node;
}
ElementWalker.prototype = {
//获取第一个指定tagName的子元素,如果tagName没定义,则返回第一个子元素
first: function(tagName) {
if((typeof tagName === 'undefined') && this.node.firstElementChild) {
return new ElementWalker(this.node.firstElementChild);
}
for(i = 0; i < this.node.childNodes.length; i++) {
if(this.checkChild(i,tagName)) {
return new ElementWalker(child);
}
}
},
//获取最后一个指定tagName的子元素,如果tagName没定义,则返回最后一个子元素
last: function(tagName) {
if((typeof tagName === 'undefined') && this.node.lastElementChild) {
return new ElementWalker(this.node.lastElementChild);
}
for(i = parent.childNodes.length - 1; i >= 0; i--) {
var child = this.node.childNodes[i];
if(this.checkChild(child,tagName)) {
return new ElementWalker(child);
}
}
},
//返回所有指定tagName的子元素,如果tagName没定义,则返回所有子元素
all: function(tagName) {
var children = [];
for(i = 0; i < this.node.childNodes.length; i++) {
var child = this.node.childNodes[i];
if(this.checkChild(child,tagName)) {
children.push(new ElementWalker(child));
}
}
return children;
},
//校验child是否是指定tagName的元素
checkChild : function(child,tagName) {
var isOK = (typeof tagName === 'undefined') && child.nodeType == 1;
isOK = isOK || (child.tagName && child.tagName.toLowerCase() === tagName);
return isOK;
}
}

javascript遍历子元素的更多相关文章

  1. Javascript禁止子元素继承父元素的事件

    3种方法1.在父元素事件的function中加if(event.target==this){ }2.子元素事件function最后加event.stopPropgation():// 阻止事件冒泡3. ...

  2. JQuery 遍历子元素+ each函数的跳出+提取字符串中的数字

    最近脑袋迷糊的如同一团浆糊,一直出错. HTML代码如下图,现在想实现的功能是根据Ajax请求,获取到具体的button,以更新其样式.由于Button较多,每个Button都设置id,没有意义,想通 ...

  3. javascript阻止子元素继承父元素事件

    $('.box').on('click', function (e) { if(e.target == this) { console.log(e.target) } })

  4. jquery根据(遍历)html()的内容/根据子元素的内容(元素文本)来选择(查询),在子元素前加入元素

    <ul> <li>First</li> <li>second</li> <li>third</li> </ul ...

  5. Javascript事件模型(二):Javascript事件的父元素和子元素

    DOM事件标准定义了两种事件流,分别是捕获和冒泡.默认情况下,事件使用冒泡事件流,不使用捕获事件流.你可以指定使用捕获事件流,方法是在注册事件时传入useCapture参数,将这个参数设为true. ...

  6. 原生JavaScript如何解决父元素查找指定类名的子元素的问题

    问题:已知一个元素的类名是right并且这个元素的祖先元素的类名为parent,现在想通过原生JavaScript获得这个类名为right的元素. 我的思路:利用递归.先判断已知的祖先元素(题中的pa ...

  7. javascript判断一个元素是另外一个元素的子元素

    javascript判断一个元素是另外一个元素的子元素用途有很多,最常用的就是当点击页面的空白处去执行某些操作,比如弹出层等. function isParent (obj,parentObj){ w ...

  8. js遍历 子节点 子元素

    Js 节点 子元素 属性 方法 // 添加子节点前 删除所有子节点 var usernameEle = document.getElementById("username"); v ...

  9. DOM操作-倒排序子元素

    代码: —————————————————————————————— <script type="text/javascript">                // ...

随机推荐

  1. 兼容ie7的导航下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. php中intval()函数

    格式:int intval(mixed $var [, int $base]); 1.intval()的返回值是整型,1或者0.可作用于数组或者对象(对象报错信息:Notice: Object of ...

  3. Like ruby of SBM Crusher zip to dict

    how to use the zip to bulid a dict in python? data = """A dynamic, interpreted, open ...

  4. VS2012那点事儿

    VS2012并不完美支持C99标准,这一点强烈的体现在如下的错误: 也就是是说你的变量定义必须在前面,一股脑儿全写完,然后才可以使用,如果你定义变量穿插在了其他地方,那么就会报上面的错误.略微有些遗憾 ...

  5. python xml包使用记录

    <?xml version="1.0" encoding="utf-8" ?> <request> <functionID> ...

  6. equals方法,hashcode()方法

    Object类的equals 方法 用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写.   (一)说到equals方法,不得不提一下==号. ==用于比较引用和比较原生数据类型时具有不同 ...

  7. 用Python作GIS之五:从示例入手—example函数

    进入STARS后,最简单的学习方法就是演示示例数据.对于源码的分析也可以从这里入手.        以下为出发菜单项“Example Project”的函数example:def example(se ...

  8. hdu 4308 Saving Princess claire_

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Description Princess cla ...

  9. zoj 2112 Dynamic Rankings

    原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 #include<cstdio> #include ...

  10. golang的序列与反序列化

    golang写backend之类的应用,还是挺方便的...使用encoding/json包时, 必须注意, 在struct定义的属性必须是exported, 否则不会设置值. 例如:type DRol ...