使用Jquery观察属性更改
Watch attribute changes with Jquery
当div的属性发生变化时,我需要触发一个事件。我偶然发现了这个插件http://meetselva.github.io/attrchange/它似乎起到了作用。唯一的问题是它多次触发事件。例如,如果我这样做:
$("#sgPluginBox").attrchange({
callback: function(evnt) {
if(evnt.attributeName == "style") {
alert('test');
}
}
});
它将显示八个警告框。我不知道它为什么这么做。当样式属性更改时,我需要它只显示一个警告框。有什么建议吗?
编辑:
这不是最优雅的解决方案,但看起来使用$.one(alert('test'))就成功了。
尝试使用MutationObserver
$(document).ready(function() {
var target = $("#test").get(0);
// create an observer instance
var observer = new MutationObserver(function(mutations) {
if (mutations.length) {
alert(mutations[0].attributeName + " changed")
target.innerHTML = target.style.fontSize;
// disconnect `observer`
this.disconnect()
}
});
// configuration of the observer:
var config = {
attributes: true
};
// pass in the target node, as well as the observer options
observer.observe(target, config);
$("#test").attr("style", "font-size:36px");
setTimeout(function() {
$("#test").attr("style", "font-size:52px")
.html($("#test").css("fontSize"))
},
1000)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="test" style="font-size:20px;">abc</div>
相关文章:
- 未激发路由的控制器属性上的观察者
- Knockout observable没有观察到其中一个属性
- 将属性设置为未定义时未通知观察者
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 观察ES6模块属性
- 如何从具有动态可观察属性的淘汰对象中获取 JSON 字符串
- 观察多个$scope属性
- KO 绑定复选框:从代码更改“选中”属性,不更改可观察字段
- 更新挖空中可观察数组中项目的属性
- AngularJS:观察数组属性
- AngularJS观察指令属性表达式,动态继承作用域
- 聚合物通过父对象观察子属性
- 初始化可从元素属性值观察到的Knockout
- 如何使用ES6在Ember中声明可观察性或计算属性
- 如何观察聚合物元素属性值从索引.html的变化
- 当可观察数组是其他模型的属性时,挖空不会更新 UI
- 获取可观察数组项的子属性以触发更改
- 聚合物中的“观察者”与“通知”(在属性块中)与“观察者”与“侦听器”之间的区别
- 使用挖空 JS 映射选项将可观察属性添加到映射的可观察数组
- 余烬在加载时观察到异步属于关系属性