当前位置: 首页 > article >正文

封装一些可能会用到的JS的Dom操作方法(非JS自带的方法)

1. 父元素节点下的子元素节点逆序

HTMLElement.prototype.childRevers = function () {
    var all_num = this.childElementCount;

    if (all_num) {
        while(all_num--){
            this.appendChild(this.children[all_num]);
        }
    }
}
// 获取 ul 父节点对象
var oul = document.getElementsByTagName('ul')[0];
oul.childRevers();

效果:
使用前:

在这里插入图片描述
使用后:
在这里插入图片描述

2. insertAfter() 方法(相对于 insertBefore() 方法)

Node.prototype.insertAfter = function (obj, beforEle) {
    // 判断该元素是否有下个兄弟元素
    if (beforEle.nextElementSibling) {
    	// 有的话使用 insertBefore 在下一个兄弟元素之前添加
        beforEle.parentElement.insertBefore(obj, beforEle.nextElementSibling);
    } else {
    	// 没有的话直接appendChild添加
        beforEle.parentElement.appendChild(obj);
    }
}

// 要插入的元素
var op = document.createElement('p');
// 父元素
var oul = document.getElementsByTagName('ul')[0];
// 要在插入在哪个子元素之后
var oli1 = document.getElementsByTagName('li')[1];
// 调用方法
oul.insertAfter(op, oli1);

效果:
使用前:

在这里插入图片描述

使用后:
在这里插入图片描述

3. 寻找兄弟元素节点

说明:
参数为正,找到之后的第N个
参数为负,找到之前的第N个
参数为零,找到自己

/**
 * 寻找兄弟元素节点
 * 参数为正,找到之后的第N个
 * 参数为负,找到之前的第N个
 * 参数为零,找到自己
 */

HTMLElement.prototype.findElemSibling = function (num) {
    // num存在,但是不是number
    if (num !== undefined && typeof (num) !== "number") {
        return undefined;
    }

    var t_ele = this;
    while (num) {
        if (num > 0) {
            t_ele = t_ele.nextElementSibling;
            num--;
        } else if (num < 0) {
            t_ele = t_ele.previousElementSibling;
            num++;
        }
        if (!t_ele) {
            break;
        }
    }
    return t_ele
}

var oli = document.getElementsByTagName('li')[1];
console.log(oli.findElemSibling(-1));

效果:
使用前:

在这里插入图片描述
使用后:
在这里插入图片描述

4. 遍历一个父级元素下面的所有子元素节点

HTMLElement.prototype.getAllChildNode = function () {
    var ele_arr = []
    if (this.childElementCount) {
        for (let i = 0; i < this.childElementCount; i++) {
            let item = this.children[i];
            ele_arr.push(item)
            if (item.childElementCount) {
                ele_arr = ele_arr.concat(item.getAllChildNode())
            }
        }
    }
    return ele_arr;
}
var odiv = document.getElementsByTagName('div')[0];
console.log(odiv.getAllChildNode());

效果:
使用前:

在这里插入图片描述
使用后:
在这里插入图片描述

5. 找出一个元素的第N层父级元素

HTMLElement.prototype.getEleParent = function (num) {
    // num存在,但是不是number
    if (num !== undefined && typeof (num) !== "number") {
        return undefined;
    }
    var t_ele = {};
    var all_num = num;

    // 只有大于零才会查找
    if (num > 0) {
        t_ele = this;
        while (num) {
            if (t_ele.parentElement) {
                t_ele = t_ele.parentElement;
            } else {
                t_ele = null;
                break;
            }

            num--;
        }
        return t_ele;
    } else {
        return undefined;
    }
}

var oa = document.getElementsByClassName('item_a')[0];
console.log(oa.getEleParent(2))

效果:
使用前:

在这里插入图片描述

使用后:
在这里插入图片描述


http://www.kler.cn/a/148942.html

相关文章:

  • 1.两数之和-力扣(LeetCode)
  • 【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题
  • ubuntu连接orangepi-zero-2w桌面的几种方法
  • 速盾:高防 CDN 和 CDN 的缓存机制都一样吗?
  • 比ChatGPT更酷的AI工具
  • PHP多门店医疗服务系统小程序源码
  • Python小知识
  • IWDG和WWDG HAL库+cubeMX
  • ruoyi-plus使用Statistic统计组件升级element-plus
  • 2023-简单点-机器学习中矩阵向量求导
  • 【Qt】获取当前系统用户名:9种获取方式
  • 企业如何选择安全又快速的大文件传输平台
  • 34 - 记一次线上SQL死锁事故:如何避免死锁?
  • Vue3-toRef 和 toRefs 函数
  • Minecraft Modding 模组制作-自定义方块
  • C#-认识串口通信并使用串口助手
  • 使用Pytorch从零开始构建扩散模型-DDPM
  • 探索短剧市场的商机:打造短视频平台的全方位指南
  • 融云 swift 自定义消息类型
  • 第19章JAVA绘图
  • 自动化测试中几种常见验证码的处理方式及如何实现?
  • .net HttpClient封装
  • 项目:基于UDP的网络聊天室
  • WordPress自动采集伪原创发布工具
  • Docker 概述与安装
  • 基于YOLO模型建筑工地个人防护设备目标检测