前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTML5-类库系列 原生DOM功能函数

HTML5-类库系列 原生DOM功能函数

作者头像
HTML5学堂
发布2018-03-12 16:19:05
9690
发布2018-03-12 16:19:05
举报
文章被收录于专栏:HTML5学堂HTML5学堂

HTML5学堂:今天我们抛开框架,书写一些DOM操作方面的功能。相信用过JQ的人,绝对不会使用原生DOM进行某些效果的实现。原因很简单,在原生DOM当中需要处理各种问题——主要是非标签节点也会成为查找的内容。今天我们就是用原生实现这样几个功能——查找第一个、最后一个子元素、查找父级元素、查找前一个和下一个兄弟级标签、移除一个元素所有的子元素。也借助这个过程理解功能的原理。

1、查找第一个子元素 DOMFirstChild

在进行子元素的查找时,我们都会想到原生DOM方法中的firstChild,那么此时我们需要保证查找到的元素是存在的,同时保证这个元素是一个标签节点(此处我们只需要检测节点类型-nodeType),如果不是,那么我们就在当前标签状态下,继续寻找下一个兄弟级标签。

ele.nodeType == 1 —— 元素节点

ele.nodeType == 2 —— 属性节点

ele.nodeType == 3 —— 文本节点

ele.nodeType == 4 —— CDATA区段

ele.nodeType == 5 —— 实体引用

ele.nodeType == 6 —— 实体

ele.nodeType == 7 —— 处理指令

ele.nodeType == 8 —— 注释节点

ele.nodeType == 9 —— 文档节点

代码实现:

代码语言:javascript
复制
/*
* DOM相关操作
* 作者:独行冰海 - 利利
* 原生DOM指向各种类型,需要处理,令其只指向元素类型
*/
function DOMFirstChild(nowEle){
var targetEle = nowEle.firstChild;
while (targetEle && targetEle.nodeType != 1) {
targetEle = targetEle.nextSibling;
}
return targetEle;
}

2、查找最后一个子元素 DOMLastChild

先使用lastChild寻找到最后一个子元素,然后检测,如果不是标签节点,则使用previousSibling向前寻找同级元素。

代码实现:

代码语言:javascript
复制
function DOMLastChild(nowEle){
var targetEle = nowEle.lastChild;
while (targetEle && targetEle.nodeType != 1) {
targetEle = targetEle.previousSibling;
}
return targetEle;
}

3、可控层数的父级元素查找 DOMParent

这个函数的作用与前两者不同,并非是单纯的筛选节点,而是进行了功能扩充,增加了一个参数,让用户可以控制查找父级元素的层数,如直接查找id名为con的父级的父级元素,在这个函数中也是可以做到的。此处的一个原理在于,每次先对当前元素进行检测,检测是否是根节点(即文档节点,nodeType==9),如果不是根节点,那么使用parentNode进行向上级查找。此时利用第二个参数构成for循环,实现多次的查找父级。

代码实现:

代码语言:javascript
复制
// 操作多层
function DOMParent(nowEle, num) {
var targetEle = nowEle;
var num = num || 1;
for (var i = 0; i < num; i++) {
if (targetEle.nodeType == 9) { // 根节点
break;
} else if (targetEle != null) {
targetEle = targetEle.parentNode;
}
};
return targetEle;
}

在这个代码中还进行了一处的优化,即第二句 var num = num || 1,也就是说,程序员在查找一级的父级元素时是可以不传第二个参数的。

4、前一个兄弟标签 DOMPre

这个函数功能的原理和最初两个类似,因此直接上代码:

代码语言:javascript
复制
function DOMPre(nowEle) {
var nowEle = nowEle.previousSibling;
while(nowEle && nowEle.nodeType != 1) {
nowEle = nowEle.previousSibling;
}
return nowEle;
}

5、下一个兄弟标签 DOMNext

这个函数功能的原理和最初两个类似,因此直接上代码:

代码语言:javascript
复制
function DOMNext(nowEle) {
var nowEle = nowEle.nextSibling;
while(nowEle && nowEle.nodeType != 1) {
nowEle = nowEle.nextSibling;
}
return nowEle;
}

6、清空所有子标签 DOMEmpty

好啦,这个是我们今天最后一个功能函数,清空一个元素中的所有子元素(标签)。原理很easy,从当前元素的第一个元素开始找,然后就用removeChild,删啊删啊删啊~~~~看代码:

代码语言:javascript
复制
function DOMEmpty(nowEle) {
while(nowEle.firstChild) {
nowEle.removeChild(nowEle.firstChild);
}
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 懂点君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、查找第一个子元素 DOMFirstChild
    • 代码实现:
    • 2、查找最后一个子元素 DOMLastChild
      • 代码实现:
      • 3、可控层数的父级元素查找 DOMParent
        • 代码实现:
        • 4、前一个兄弟标签 DOMPre
        • 5、下一个兄弟标签 DOMNext
        • 6、清空所有子标签 DOMEmpty
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档