我需要在页面渲染时通过jQuery设置一些HTML。例如,我可能有这个:
<ol>
<li>
<div class="theDiv"></div>
<a class="theLink"...>...</a>
<li>
<ol>
有时我需要隐藏div。有时我需要将click事件应用于锚标记。所以我可能有这个:
$('li').hide();
$('a').click(function(){...});
工作正常。
但是,我们现在正在将额外的LI加载到此列表中。不幸的是,我们不是用jQuery做的。我可以将上面的内容包装在ajax加载后可以调用的函数中,以重新渲染所有内容。但是有更好的方法吗?
我在想live()
是解决方案,但我发现delegate()
现在是首选的文档。
无论哪种方式,两者似乎都只允许绑定事件(单击,悬停等),而不是在将新HTML添加到DOM后简单地重新渲染。
有没有办法通过delegate()
做什么?有没有更合适的方法来处理它?</ p>
更新:
也许这是一个更简单的问题:在AJAX更新之后让JS对DOM进行操作,是否必须通过AJAX调用本身(通常通过回调函数)触发它,或者是否有jQuery方式“观察”DOM更新并相应关闭?
答案 0 :(得分:0)
我认为最新的jquery API调用是jQuery.on文档页面上的第二个示例似乎完全适合您的情况。
答案 1 :(得分:0)
将要执行的代码放在AJAX调用的success
回调中。确保只在新元素上运行代码,除非代码不会在同一元素上多次运行时破坏任何内容。
答案 2 :(得分:0)
解决方案是创建一个利用jQuery的javascript函数,并从内部调用 无论你有执行ajax的javascript。
注意:阅读后看起来直播()仅适用于点击和悬停等事件。
function updateMyStuff() {
$('li').hide();
$('a').click(function(){...});
}
...
function myCrazyNonJqueryAjaxWhy?() {
updateMyStuff();
}