如何调用函数一旦dom元素的样式改变Javascript/jquery
How to invoke function once the dom element style is changed Javascript/jquery
我已经浏览了多个示例,并实现了示例所述的相同行为。
加载页面后,如果dom元素的样式发生了变化,我需要触发一个方法。
即使我在浏览器控制台中更改了任何内容,样式更改事件也应该触发。事件将显示为none和显示块。
在我的代码中,如果我在浏览器控制台中进行更改,则更改方法不会被触发。
这是我尝试过的:
(function() {
var ev = new $.Event('style'),
orig = $.fn.css;
$.fn.css = function() {
var ret = orig.apply(this, arguments);
$(this).trigger(ev);
return ret;
}
})();
$('p').bind('style', function(e) {
console.log($(this).attr('style'));
});
p {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p> test </p>
您可以使用MutationObserver:
演示:// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var oldDisplay = (mutation.oldValue + '').match(/display:'s*('w*)/);
oldDisplay = oldDisplay ? oldDisplay[1] : '';
if (oldDisplay !== mutation.target.style.display) {
console.log('element', mutation.target.id,
'style.display=', mutation.target.style.display);
}
});
});
// attach the observer to the elements of interest:
$('p').each(function () {
observer.observe(this, {
attributes: true,
attributeFilter: ['style'],
attributeOldValue: true
});
});
// test it, by changing style.display through button clicks:
$('button').click(function() {
$('p').toggle(); // show/hide
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="p1"> test this </p><button>hide/show</button>
相关文章:
- insertRule不插入样式元素
- 具有描边属性的 SVG 样式 G 元素
- 如何在样式元素中获取 CSS 代码
- 如何让用户更改表单的样式元素
- 如何根据子组件的状态更改父组件样式元素
- 如何使样式元素的一部分成为函数?(IE:颜色:$random而不是颜色:红色)
- 动态创建的样式元素
- 如何使用javascript获取外部样式元素的css属性
- 在ExtJS中为一个项目添加多个样式元素
- 在目标页面加载完成之前添加样式元素
- 将样式元素动态插入DOM的最后一种跨浏览器方式
- CKEditor 剥离 Rails 中跨度类的样式元素
- 根据单元格内容更改样式元素
- 更改绝对样式元素的位置
- 在React组件中呈现样式元素
- 样式元素左置:页面的x px
- 按钮样式元素的类冲突
- Javascript样式元素
- 在移动设备中,哪一个更快:包括一个额外的CSS文件或在JavaScript中创建一个样式元素
- 需要一种方法来样式元素,我不能访问