var oDiv = document.getElementById('div1');
// -> 首先获取所有的子节点(childNodes),在所有的子节点中,把元素节点过滤出来(nodeType === 1)
// -> 如果多传递一个标签名,还要在获取的子元素集合中把对应标签名的进行二次筛选
function children(currentElement, tagName) {
var ary = [];
// -> IE6-8下不能使用内置的children属性,则自己写代码实现
if (/MSIE (6|7|8)/i.test(navigator.userAgent)) {
var nodeList = currentElement.childNodes;
for (var i = 0, len = nodeList.length; i < len; i++) {
var curNode = nodeList[i];
if (curNode.nodeType === 1) {
ary[ary.length] = curNode;
}
}
} else {
// 标准浏览器中,直接使用children即可,但是这样获取的是一个元素集合(类数组),
// 为了和IE6-8下保持一致,借用数组原型上的slice实现把类数组转化为数组
ary = Array.prototype.slice.call(currentElement.children);
}
// [div,div,div,p,p,p] len=6 i=0 i<6 i++
// -> 二次筛选
if (typeof tagName === 'string') {
for (var k = 0; k < ary.length; k++) {
var curElemNode = ary[i];
if (curElemNode.nodeName.toLowerCase() !== tagName.toLowerCase()) {
// -> 不是想要的标签
ary.slice(k, 1);
k--;
}
}
}
return ary;
}
console.log(children(oDiv, 'p').length);
封装: 获取指定元素的所有(指定)子节点
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- > 在开发中,会发现仅管是一个后端人员,也会有需要去写一下前端页面。介绍一下前端页面中,如何去获取元素 ``` $...
- 完成项 jq实现选择表单提交非click事件动态绑定判断是否隐藏 1.jq实现选择表单提交 主要是选择器的应用,以...
- ShareSDK下载地址: http://www.mob.com/#/downloadDetail/Share...