Javascript jQuery:确定DOM已更改

Javascript jQuery:确定DOM已更改,javascript,javascript-events,jquery,Javascript,Javascript Events,Jquery,编辑:根据Matt的建议更改.ready()调用 我使用jQuery来配置如下内容: $(function () { $('.myThing').each(function() { ... configure it ... }); }); 我的问题是,在调用.ready()之后向DOM添加新元素。不在这些元素上执行配置 对于绑定单击事件之类的简单操作,.live()完成任务。但是对于更复杂的事情,我还没有找到一个好的解决方案 DOM更改时是否有事件?或

编辑:根据Matt的建议更改.ready()调用

我使用jQuery来配置如下内容:

$(function ()
{
     $('.myThing').each(function() {

         ... configure it ...

     });
});
我的问题是,在调用.ready()之后向DOM添加新元素。不在这些元素上执行配置

对于绑定单击事件之类的简单操作,.live()完成任务。但是对于更复杂的事情,我还没有找到一个好的解决方案

DOM更改时是否有事件?或者更具体地说,当向DOM中添加新元素时

编辑:使用的暂定解决方案似乎是:

$(function ()
{
    $.fn.configureIt = function()
    {
        ... configure it ...
    }
});
$('.myThing').livequery(function () {
    $(this).configureIt ()
});
再次编辑:livequery不是解决方案。它经常在DOM中搜索添加或删除的元素。在一台速度相当快的计算机上,运行一个中等的页面,这是很好的。在一台速度较慢的计算机上,有一个非常大的页面、几个livequeries和IE6,它每隔几秒钟就有半秒的延迟,页面加载的延迟更长

我们的结论是,做出共同的“共同行为”迎合了我们的懒惰。由于我们的团队有一些中等程度的JavaScript人员,有些几乎没有JavaScript人员,也没有JavaScript专家,因此我们希望为HTML标记定义约定,而不是在每个新页面上都涉及这些行为。考虑到我们当时的JavaScript知识,这被证明是不可能的

我们提出的解决方案是,每当我们使用AJAX或动态内容创建更改DOM时,都会发生以下事件:

$('.stuff').load(loadUrl, postData, function() {
    $(this).trigger('contentLoaded');
    // among other stuff
});
对于任何小部件类型的事情,我们都依赖于这个约定

$('*').live('contentLoaded', function() {
    $('.myThing', this).configureIt();
});

这并不理想。单个页面制作者需要了解在页面中做事情时触发自定义事件的约定(承认封装在一些共享实用程序函数中),小部件制作者需要依赖使用此约定的页面制作者,但最终,这不是一个大问题,因为我们工作在一个封闭的团队,不对外公布我们的应用程序。

你提到已经探索过<>代码> LIVER()/Case>方法,但是你也可能想考虑一下。我仍在检查API是否更合适,但如果

.live()
不够,它可能就足够了。

我使用该插件就是为了这个目的。它对我来说是有效的,但如果对你来说不是,你至少可以从源代码中了解它的工作原理。

小心使用
$().ready
。从版本1.4开始,这与以前的版本有完全不同的结果;在jQuery 1.4中,
$()
返回一个空的jQuery集,而不是文档对象。您应该考虑使用<代码> $(文档).Read(…)<代码>或<代码> $(…)<代码>,以避免在您决定更新时中断代码。