元素具有一个javascript style
对象,其中包含css样式的不同名称和值。我想每次此对象更改时都触发一个函数, 而无需使用轮询
。是否可以通过跨浏览器兼容的方式来执行此操作,并且可以可靠地与第三方代码一起工作(因为假设您提供的是嵌入式脚本)?绑定一个像这样的javascript事件DOMAttrModified
或DOMSubtreeModified
将其绑定是不够的,因为它们在Chrome中不起作用。
编辑4: 现场演示
$(function() {
$('#toggleColor').on('click', function() {
$(this).toggleClass('darkblue');
}).attrchange({
trackValues: true,
callback: function(event) {
$(this).html("<ul><li><span>Attribute Name: </span>" + event.attributeName + "</li><li><span>Old Value: </span>" + event.oldValue + "</li><li><span>New Value: </span>" + event.newValue + "</li></ul>");
}
});
});
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 12px;
}
#toggleColor {
height: 70px;
width: 300px;
padding: 5px;
border: 1px solid #c2c2c2;
background-color: #DBEAF9;
}
#toggleColor span {
font-weight: bold;
}
#toggleColor.darkblue {
background-color: #1A9ADA;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://meetselva.github.io/attrchange/javascripts/attrchange.js"></script>
<p>Click below div to toggle class darkblue.</p>
<div id="toggleColor"></div>
编辑3: 我把所有这些放在一起作为一个可以从git
attrchange下载的插件,这是[演示页面。
编辑2:
编辑1:
向回调添加了修改后的属性名称。
$(function() {
(function($) {
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
function isDOMAttrModifiedSupported() {
var p = document.createElement('p');
var flag = false;
if (p.addEventListener) p.addEventListener('DOMAttrModified', function() {
flag = true
}, false);
else if (p.attachEvent) p.attachEvent('onDOMAttrModified', function() {
flag = true
});
else return false;
p.setAttribute('id', 'target');
return flag;
}
$.fn.attrchange = function(callback) {
if (MutationObserver) {
var options = {
subtree: false,
attributes: true
};
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(e) {
callback.call(e.target, e.attributeName);
});
});
return this.each(function() {
observer.observe(this, options);
});
} else if (isDOMAttrModifiedSupported()) {
return this.on('DOMAttrModified', function(e) {
callback.call(this, e.attrName);
});
} else if ('onpropertychange' in document.body) {
return this.on('propertychange', function(e) {
callback.call(this, window.event.propertyName);
});
}
}
})(jQuery);
$('.test').attrchange(function(attrName) {
alert('Attribute: ' + attrName + ' modified ');
}).css('height', 100);
});
突变观察者是DOM4中突变事件的提议替代者。预计它们将包含在Firefox 14和Chrome 18中
浏览器支持:
onpropertychange
-在IE中受支持(在IE 7中经过测试)
DOMAttrModified
-在IE 9,FF和Opera中受支持
MutationObservers
-是非常新的功能,在Chrome18中可以正常工作。不确定它支持多远,尚未在Safari中进行测试。
问题内容: 我有一个div的特定样式表。现在我想使用js动态修改div的一个属性。 我该怎么做? 它是否正确? 问题答案: 几乎是正确的。 由于是JavaScript操作符,因此您实际上不能在属性名称中使用它。如果您正在设置,或者类似的单字,您的代码就可以正常工作。 但是,对于任何带连字符的属性名称,您都需要记住的是,在javascript中,您删除了连字符,并使下一个字母变为大写,因此应为。 还
问题内容: 是否可以使用JavaScript更改CSS样式表? 我 不是 在说: 我 AM 谈论改变: 除了做一些肮脏的事情(我们还没有尝试过)之外,比如在头部创建一个新对象,innerHTML在其中创建一个样式标签,等等。尽管这样做确实可行,但仍会带来一些样式问题块已经在其他地方定义了,我不确定何时/是否浏览器会解析动态创建的样式块? 问题答案: 浏览器支持已得到很大改进(支持所有浏览器,包括I
问题内容: 是否可以通过JavaScript更改CSS伪元素样式? 例如,我想像这样动态设置滚动条的颜色: 而且我还希望能够告诉滚动条这样隐藏: 但是,这两个脚本都返回: 未捕获的TypeError:无法读取null的属性“样式” 还有其他解决方法吗?跨浏览器的互操作性并不重要,我只需要它在Webkit浏览器中即可工作。 问题答案: 编辑 : 从技术上讲,有一种通过JavaScript直接更改CS
我有一个名为的简单函数: 我想知道除了这个以外,是否还有其他方法可以添加某些属性的值:等于,等于等。 我试过这样的方法: 但那行不通。我知道尝试它可能是愚蠢的(因为我的IDE说这个表达式不能分配给类型HTML元素^^')。
我有问题,因为我想在内部包围一些,所以我需要知道。 哪些DOM元素可以是tr的子元素?(我知道div不能。)
问题内容: React文档明确指出,有条件地调用钩子是行不通的。从原始的React hooks演示文稿来看 ,原因是因为React使用您调用hook的顺序来注入正确的值。 我理解这一点,但是现在我的问题是,从带有钩子的函数组件中尽早返回是否可以? 那么允许这样的事情吗? 从技术上讲,该挂钩是有条件地调用的,但是在渲染之间它们的调用顺序不会改变(即使有可能会调用更少的挂钩)。 如果不允许这样做,您能