Вот модификация attr()
в соответствии с тем, о чем вы говорите.
(function(attr) {
jQuery.attr = function(elem, name, value) {
var current = attr(elem, name, undefined); // read current value
var retval = current;
if (value !== undefined) { // writing
retval = attr(elem, name, value); // call original
jQuery.event.trigger('attr.changed', {
attribute: name,
from: current,
to: value
}, elem)
}
return retval; // return original
}
})(jQuery.attr);
Использование должно быть:
$(".friend a").bind("attr.changed", function(e, changed) {
alert("The " + changed.attribute + " attribute changed from " + changed.from + " to " + changed.to + "!");
});
$(".friends a").attr("class", "foo"); // triggers alert
Я не верю, что css()
возможно, поскольку свойство .style
не может вызывать события. data()
Я не знаю.
Заметьте, я не одобряю его использование, это было просто академическое усилие. То, что вы хотите, влечет за собой снижение производительности на attr()
, чтобы заполнить свойство from
аргумента события. Мы должны прочитать старое значение, прежде чем писать новое.