H5新特性MutationObser监听标签中属性的改变或者标签的添加删除事件

H5新特性MutationObser监听标签中属性的改变或者标签的添加删除事件


MutationObser

Mutation Observer API 用来监视 DOM 变动。比如节点的增减、属性的变动、文本内容的变动。

observe方法

MutationObserver使用observe方法进行监听指定的元素节点变化,observe方法接受两个参数:observe(DOM,option) 。下面是option设置的一些属性

属性描述类型
childList子节点的变动(指新增,删除或者更改)Boolean
attributes属性的变动Boolean
characterData节点内容或节点文本的变动Boolean
subtree表示是否将该观察器应用于该节点的所有后代节点Boolean
attributeOldValue表示观察attributes变动时,是否需要记录变动前的属性值Boolean
characterDataOldValue表示观察characterData变动时,是否需要记录变动前的值Boolean
attributeFilter表示需要观察的特定属性Array,如[‘class’,‘src’]

disconnect方法

当不需要监听节点变化时,可以使用disconnect()方法取消监听。

takeRecords方法

takeRecords方法用来清除变动记录,即不再处理未处理的变动。该方法返回变动记录的数组。

MutationRecord对象

DOM 每次发生变化,就会生成一条变动记录(MutationRecord 实例)。该实例包含了与变动相关的所有信息。Mutation Observer 处理的就是一个个MutationRecord实例所组成的数组。

MutationRecord对象包含了DOM的相关信息,有如下属性:

属性Value
type观察的变动类型(attribute、characterData或者childList)
target发生变动的DOM节点
addedNodes新增的DOM节点
removedNodes删除的DOM节点
previousSibling前一个同级节点,如果没有则返回null
nextSibling下一个同级节点,如果没有则返回null
attributeName发生变动的属性。如果设置了attributeFilter,则只返回预先指定的属性
oldValue变动前的值。这个属性只对attribute和characterData变动有效,如果发生childList变动,则返回null

下面为示例:

var mutationObserver = new MutationObserver(function(mutations) {
        /************************当DOM元素发送改变时执行的函数体***********************/
        if($(mutations[0].target).hasClass("active") && $(mutations[0].target).attr("aria-expanded") === "false"){
            $(mutations[0].target).attr("aria-expanded","true");
        }
        /*********************函数体结束*****************************/
    });
    //mutationObserver.observe(监听对象,监听操作)
$(".nav-left-sidebar ul.navbar-nav").each(function(){
        $(this).find(".parent-nav >a").each(function () {
            mutationObserver.observe(this, {
                attributes: true,
            });
        })
    })

总结

提示:var test = new MutationObserver(回调函数);
test.observe(DOM,option);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值