工作中埋码需求,当某些动态插入的元素出现时触发埋码事件,因此需要对插入元素的父节点进行监听,子节点发生变化时触发相应埋码逻辑。

  方法一 监听页面结构及子元素变化:

(function () {
//事件触发时执行埋码内容
function do_track() {
if ($("#LXB_CONTAINER > ins.lxb-cb-tip.lxb-cb-tip-feedback > ins.lxb-cb-tip-con > ins.success-tip-phone") && eventflag) {
//触发事件
eventflag = false;
if (timer) { clearInterval(timer) }
}
}
try {
var eventflag = true;
var message_box = document.querySelector("#va");
//以下代码为监控整个Body元素的变化
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
if (MutationObserver) {
var MutationObserverConfig = {
childList: true,
subtree: true,
};
var observer = new MutationObserver(function (mutations) {
do_track();
});
observer.observe(message_box, MutationObserverConfig);
}
else if (message_box.addEventListener) {
message_box.addEventListener("DOMSubtreeModified", function (evt) {
do_track();
}, false);
}else {
var timer = setInterval(function () {
do_track();
}, 1000)
}
} catch (error) { }
})()

  方法二 监听元素属性值的变化触发相应逻辑:

try{
//Watch Elements and Trigger Event
var observer = new MutationObserver(function(mutations){
console.log(mutations)
var isShowOnetimeCheck = [];
//get lastone in mutations
var mutaiton = mutations[mutations.length-1];
//event name & content Dict list
var eventNameDict = {"pattern01":{"show":"sssss","click":"dddddd"},"pattern02":{"show":"eeeee","click":"ffff"},"pattern03":{"show":"gggg","click":"qqqq"}};
var patternName = mutaiton.target.className.split(" ")[0];
var eventNameObj = eventNameDict[patternName];
console.log("patternName:"+mutaiton.target.className.split(" ")[0])
var buttonImg = mutaiton.target.querySelector("div.check_contents.active > div > a > img");
if(buttonImg && eventNameObj && mutaiton.target.className.includes("active") && !isShowOnetimeCheck.includes(mutaiton.target.className)){
setTimeout(function(){
//触发事件
},2500)
$(document.querySelector("div.check_contents.active > div > a > img").parentElement).off("click").on("click",function(){
//触发事件
isShowOnetimeCheck.push(mutaiton.target.className);
})
} //mutations.querySelector("div.check_contents.active > div > a > img").getAttribute("alt")
});
/** 所监听变化元素的父节点*/
var elem = document.querySelector('#template > div.check_container > div.check_after'); /** 监听设置
*childList:子节点的变动(指新增,删除或者更改)。
*attributes:属性的变动。
*characterData:节点内容或节点文本的变动。
*subtree:布尔值,表示是否将该观察器应用于该节点的所有后代节点。
*attributeOldValue:布尔值,表示观察attributes变动时,是否需要记录变动前的属性值。
*characterDataOldValue:布尔值,表示观察characterData变动时,是否需要记录变动前的值。
*attributeFilter:数组,表示需要观察的特定属性(比如['class','src'])
*/
var config = {
attributes: true,
attributeFilter : ['class'],
childList: true,
subtree:true,
characterData: true,
characterDataOldValue: true,
};
/** 元素与监听设置绑定 */
observer.observe(elem, config);
}catch(e){
console.log("ptmessage:"+e);
}

  

MutationObserver监听dom元素结构及属性变化的更多相关文章

  1. MutationObserver 监听DOM树变化

    1 概述 Mutation observer 是用于代替 Mutation events 作为观察DOM树结构发生变化时,做出相应处理的API.为什么要使用mutation observer 去代替 ...

  2. MutationObserver 监听 DOM 树变化

    MutationObserver 是用于代替 MutationEvents 作为观察 DOM 树结构发生变化时,做出相应处理的 API .为什么要使用 MutationObserver 去代替 Mut ...

  3. js监听dom元素内容变化

    $("#divid").bind('DOMNodeInserted', function(e) { alert('element now contains: ' + $(e.tar ...

  4. jQuery学习(监听DOM加载)

    jQuery的extend方法 function njQuery() { } /* njQuery.extend = function (obj) { // 此时此刻的this就是njQuery这个类 ...

  5. js动态监听dom变化

    原生js 动态监听dom变化,根据不同的类型绑定不同的处理逻辑 // Firefox和Chrome早期版本中带有前缀   var MutationObserver = window.MutationO ...

  6. js实时监听dom尺寸变化

    开发过程中总会遇到dom节点尺寸变化,去做一些相应的逻辑,第一想到的应该是用$(window).resize()去做,但是这个是监听浏览器窗口的所以这个时候要用 ResizeObserver Resi ...

  7. JS监听DOM结构变化

    在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生成.$("#id").html()是获取不到我想要 ...

  8. javascript 原生方法监听DOM结构改变事件

    js原生方法监听DOM结构改变事件 document.addEventListener('DOMNodeInserted',function(){alert(1)},false);document.a ...

  9. vue中监听页面滚动和监听某元素滚动

    ①监听页面滚动 在生命周期mounted中进行监听滚动: mounted () { window.addEventListener('scroll', this.scrollToTop) }, 在方法 ...

  10. js监听某个元素高度变化来改变父级iframe的高度

    最近需要做一个iframe调用其他页面内容,这个iframe地址是可变化的,但是里面的内容高度不确定且里面内容高度可调整,所以需要通过监听iframe里面body的高度变化来调整iframe的高度. ...

随机推荐

  1. 火爆,Github标星240K的编程学习路线图,适合所有程序员!

    推荐一个涵盖开发.运维.产品设计的学习路线图,在Github已经start超过240K,包括各门编程语言! 一.涵盖的路线图 该项目涵盖了非常全面的学习路线图: 前端路线图 后端路线图 ASP.NET ...

  2. 【最佳实践】如何设计 RESTful API ?

    良好的 API 设计是一个经常被提及的话题,特别是对于那些试图完善其 API 策略的团队来说.一个设计良好的 API 的好处包括:改进开发者体验.更快速地编写文档以及更高效地推广你的 API.但是,到 ...

  3. 02.详解盒子模型&选择器初识

    1.Div盒子 用div做圆 能否优化,去掉div之间的距离?margin属性 用表格做圆 2.CSS样式 总结:需要注意的是行级标签设置宽高不会生效 小练习:使用span标签 3.CSS选择器演示及 ...

  4. 【Python&GIS】判断图片中心点/经纬度点是否在某个面内

     Python的exifread库可以获取图片中的源数据信息,包括经纬度.相机厂商.曝光时间.焦距.拍摄时间.拍摄地点等等信息.我们可以通过exifread库从图片中获取图片的经纬度,再通过shape ...

  5. Airtest图像识别测试工具原理解读&最佳实践

    1 Airtest简介 Airtest是一个跨平台的.基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows.Android和iOS.Airtest框架基于一种图形脚本语言Si ...

  6. RLHF技术在智能金融中的应用:提高金融智能化和自动化水平”

    目录 引言 随着人工智能技术的不断发展和普及,金融智能化和自动化水平也得到了显著提高.在这个时代,RLHF(Reinforcement Learning with Human Feedback)技术已 ...

  7. spingmvc配置AOP 之 非注解方式

    spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...

  8. HCL 实验7:OSPF

    拓扑图 R1配置 [R1]int g0/1 [R1-GigabitEthernet0/1]ip add 192.168.4.1 24 [R1-GigabitEthernet0/1]undo shutd ...

  9. 即构推出低延迟直播产品L3,可将直播延迟降到1s

    近日,全球云通讯服务提供商ZEGO即构科技推出低延迟直播产品Low-Latency Live,简称L3.这款产品对传统CDN直播中"延迟较大.弱网抗性差.观众端内容不同步"等问题进 ...

  10. [SCOI2005] 栅栏【题解】

    简要题意 木材店老板给出一个整数 \(m\) 和 \(m\) 个木板的长度.老板给出的木板可以随意无损耗切割. 约翰给出一个整数 \(n\) 和所需要的 \(n\) 个木板的长度. 求约翰能得到最多木 ...