如果div中的内容发生变化,有什么方法可以观察吗?
假设我有:
<div id="hello"><p>Some content here</p></div>
在5秒后的某一时刻,它会变成:
<div id="hello"><ul><li>This is totally different!</li></ul></div>
如何通过回调或其他方式通知我这个问题?在大多数情况下,我可以让执行插入的javascript告诉我。但我想知道这是否可能。
发布于 2010-07-13 14:20:57
jQuery .change()方法仅适用于表单域。
我为你写了一个小的jQuery插件:
<!-- jQuery is required -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- this is the plugin -->
<script>
jQuery.fn.contentChange = function(callback){
var elms = jQuery(this);
elms.each(
function(i){
var elm = jQuery(this);
elm.data("lastContents", elm.html());
window.watchContentChange = window.watchContentChange ? window.watchContentChange : [];
window.watchContentChange.push({"element": elm, "callback": callback});
}
)
return elms;
}
setInterval(function(){
if(window.watchContentChange){
for( i in window.watchContentChange){
if(window.watchContentChange[i].element.data("lastContents") != window.watchContentChange[i].element.html()){
window.watchContentChange[i].callback.apply(window.watchContentChange[i].element);
window.watchContentChange[i].element.data("lastContents", window.watchContentChange[i].element.html())
};
}
}
},500);
</script>
<!-- some divs to test it with -->
<p>Testing it: (click on divs to change contents)</p>
<div id="a" onclick="$(this).append('i')">Hi</div>
<div id="b" onclick="$(this).append('o')">Ho</div>
<div class="c" onclick="$(this).append('y')">He</div>
<div class="c" onclick="$(this).append('w')">He</div>
<div class="c" onclick="$(this).append('a')">He</div>
<!-- this is how to actually use it -->
<script>
function showChange(){
var element = $(this);
alert("it was '"+element.data("lastContents")+"' and now its '"+element.html()+"'");
}
$('#a').contentChange(function(){ alert("Hi!") });
$('div#b').contentChange( showChange );
$('.c').contentChange(function(){ alert("He he he...") });
</script>
请注意,此操作仅监视元素(html)内容的更改,而不是属性。
发布于 2010-07-13 14:37:17
当HTML/DOM内容改变时,不会触发原生jQuery/DOM事件。
你可以(如果你觉得特别浪费)这样做:
$(function() {
var $div = $("#hello");
var html = $div.html();
var checking = setInterval(function() {
var newhtml = $div.html();
if (html != newhtml) {
myCallback();
html = newhtml;
}
},100);
function myCallback() {
alert('content changed!');
// if you only want it to fire once, uncomment the following:
// clearInterval(checking);
}
});
请记住,每隔100ms调用一次.html()
可能不是提高站点性能的最佳选择。
jsFiddle mockup
发布于 2011-10-24 01:35:33
也许,监控修改图层内容的事件源是合理的?比方说,在内容可能发生变化之后,用户点击了任何地方(读为“做了一次点击”)。因此,如果您在单击之后检查.html(),而不是使用循环-它可能会节省一些系统资源。
https://stackoverflow.com/questions/3233991
复制相似问题