如何强制DOM在Javascript / jQuery中重新评估?

时间:2009-05-10 00:51:50

标签: javascript jquery

我动态地将HTML附加到网页上,我也使用jQuery来管理内容。

当我添加HTML代码时,jQuery忽略了它的存在 例如:

$("td.elementToClick").click(...

使用jQuery可以很好地工作。但是,如果代码中的某处我追加:

$("tr#myRowToAppend").append("<td class="elementToClick>...</td>");

如果点击它,jQuery将忽略这个新元素。

当jQuery在页面加载完成后关联事件时,我需要以下两个解决方案之一:   - 强制DOM重新评估页面而不改变当前布局(我不希望刷新,所以location.reload()是不可能的)。   - 强制jQuery将这个新元素添加到它的内部事件管理器中。

我不想使用onclick="blabla()",我真的需要使用jQuery。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:9)

您正在寻找的是jQuery live。从文档描述:“将处理程序绑定到所有当前和未来匹配元素的事件(如单击)。还可以绑定自定义事件。”

如果你愿意,还有一个插件liveQuery支持更广泛的活动。

答案 1 :(得分:2)

live()方法可以减轻您的大部分麻烦。

我在IE和克隆元素中经常看到这种情况,为了支持IE,你必须对DOM操作更加小心。

我也看到很多关于SO的问题,人们在没有首先克隆它的情况下将dom元素复制/移动到dom的新部分时会出现问题,这在IE中运行得不好。

因此,您可以使用live或必须处理来自动态插入的DOM元素的事件,请确保使用clone(true)克隆它们以指定您希望复制事件:

$("body").append('<div id="one"></div>");

$("#one").mouseover(function(){});

$("body").append( $("#one").clone(true).attr('id','two') );