封装一个DOM库

本文介绍了一个自定义的DOM库,包括对象风格的DOM操作,如创建、增加、删除、修改和查找节点的功能。提供了create、after、before、append、wrap等函数,以及attr、text、html、style、class等修改节点属性和样式的功能。同时,还实现了on和off函数用于事件监听,以及find、parent、children、siblings、next、previous等查找相关节点的方法。
摘要由CSDN通过智能技术生成

手写DOM

因为DOM原生API太难用了

源代码链接

对象风格

  • window.dom 是我们提供的全局对象

增加节点

  • dom.append(parent,child)  // 用于新增儿子节点
    
  • dom.wrap(`<div></div>`)   // 用于新增爸爸节点
    

dom.create 函数

dom.create(`<div><span>hi</span></div>`) // 用于创建节点
  • 一般我们创造节点的目的就是在别的节点中插入此节点,
  • 那么我要封装一个 以输入 html格式的 的 create函数
  • 能够在创造节点的同时在里面加一些其他节点
  • 传入的字符串要是以有标签的 以html的形式来

dom.create源代码

create(string) {
   
    // 创建容器    template标签可以容纳任意元素
    const container = document.createElement('template')
    // 要trim,防止拿到空字符
    container.innerHTML = string.trim()
    // 必须要 使用 .content  要不然拿不到
    return container.content.firstChild

    // 或者
    // container.innerHTML = string
    // return container.content.children[0]
  }

示例

const div = dom.create('<div><span>hello</span></div>')
console.log(div);

dom.after 函数

由于dom中的api由于只有添加前面的节点的方法,如果想要往某个节点的后面插入节点非常的费劲

dom.after(node,newNode)     // 用于新增下一个(弟弟)节点

dom.after 源代码

这里不比担心 如果 node 这个节点是最后一个节点怎么办。 即使为null,依然能插入的

 after(node, newNode) {
   
    // 找到此节点的爸爸然后调用insertBefore(插入某个节点的前面)方法,
    //把 newNode 插入到下一个节点的前面
    return node.parentNode.insertBefore(newNode, node.nextSibling)
  }

示例

dom.before 函数

这个方法和 dom.after 方法思路一致,

dom.before(node,node2)   // 用于新增上一个(哥哥)节点

dom.before 源代码

before(node, newNode) {
   
    // 正常的返回DOM原生的添加前面的节点的方法即可
    return node.parentNode.insertBefore(newNode, Node)
  }

dom.append 函数

dom.append(parent,child)  // 用于新增儿子节点

dom.append 源代码

  append(parent, node) {
   
    return parent.appendChild(node)
  }

dom.wrap函数

实现思路: 先把这个节点先从DOM树中移出来,把原来的位置插入新的(爸爸)节点,然后在这个爸爸节点中插入原来的节点

dom.wrap(`<div></div>`)   // 用于添加在此节点外面套一个节点   (爸爸)节点

dom.wrap 源代码

  wrap(node, newNode) {
   
    // 先把newNode放在node节点的前面   后面也行
    dom.before(node, newNode)
    // 然后把node节点放在newNode里面
    dom.append(newNode, node)
  }

实现思路图:
dom.wrap思路图

示例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值