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

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

javascript 复制代码
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() 方法)

javascript 复制代码
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个

参数为零,找到自己

javascript 复制代码
/**
 * 寻找兄弟元素节点
 * 参数为正,找到之后的第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. 遍历一个父级元素下面的所有子元素节点

javascript 复制代码
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层父级元素

javascript 复制代码
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))

效果:
使用前:

使用后:

相关推荐
亓才孓4 小时前
[Class的应用]获取类的信息
java·开发语言
开开心心就好4 小时前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
爱喝白开水a4 小时前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
Never_Satisfied4 小时前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
董世昌414 小时前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
3GPP仿真实验室5 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon5 小时前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity5 小时前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发5 小时前
CSS3 边框:全面解析与实战技巧
开发语言
island13145 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络