从标题来看,这似乎很简单,但并不像标题那么简单。
我正在尝试使用像.live这样的东西检测div的实例,但是live只能应用于click,mousedown等事件,没有domupdate之类的事件。
现在让我解释一下我在做什么。当我运行插件时,它检查dom是否为div类的所有实例(因此对于此示例:c_talk是类)。然后,对于每个返回的元素,它执行操作。即使在通过ajax或其他方式进行dom更新后,我也需要使用此脚本为页面上的所有div工作c_talk。
因此,当我运行jQuery('div.c_talk').c_talk();
时,无论如何都应检测dom中的所有实例。
这是迄今为止的代码
(function($){
$.fn.c_talk = function () {
var fn = $.fn.c_talk;
var opt = {
divliveprev : 'view_prev',
divlivesend : 'send'
}
// test function
fn.activateLive = function($this) {
}
// do for each element in dom
return this.each(function(e){
var $this = jQuery(this);
if(!jQuery(this).data('init')) {
// on page set it
jQuery(this).data('init', '1');
}else {
// is already on page
alert($this.size());
}
return false;
});
};
})(jQuery);
jQuery(document).ready(function(){
jQuery('div.c_talk').c_talk();
});
对于那些不理解的人的更多信息:基本上它是一个像评论框的Facebook。你有一个div,div包含注释,一个视图上一个按钮和一个post按钮,我需要为每个注释框实例做一些事情。关键是我必须能够检测到附加的新评论框,因为我的网站在100%ajax上运行。如果我只需要检测注释框onload,这个脚本就可以正常工作。在我的情况下,这并不是那么简单,因为脚本必须能够动态检测新的评论框(通过ajax)..任何想法,我的网站是kalluna.com,如果它可以帮助你更好地理解这一点。
答案 0 :(得分:2)
您可以采用与jQuery livequery plugin类似的方式跟踪HTML更改。 livequery插件包装了所有jQuery DOM操作方法,当调用它们中的任何一个时,包装器方法会执行一些特殊操作(在您的情况下,使用{{1在c_talk
上调用div
函数}} c_talk
)然后代理回原始函数。
class
答案 1 :(得分:1)
你需要进行民意调查,我相信。
// Consider a function to make this DRY - getDomLength()
var domItems = $(document).find('*').length;
setInterval(function() {
if (domItems != $(document).find('*').length) {
domChanged();
}
domItems = $(document).find('*').length;
}, 100);
如果没有其他更好的方法,轮询更改通常是完成某项工作的唯一方法。
请记住,您可以使用此代码(例如click()
)确定事件源自何处...
$(document).click(function(event) {
var element = event.target;
});