有一个div经常被ajax更改为innerHTML。一旦页面加载,jQuery function()可以工作,但是当innerHTML由ajax更改时,某些功能不起作用。我使用firebug检查了代码,并试着简单解释一下。**
我认为DOM只在第一次加载页面时加载js文件,如果ajax修改innerHTML,那么函数不会以某种方式调用。你说什么?什么可以根据你的解决方案? HTML网页
<body>
<div class="_div_change"> dynamically class add by jQuery function()
here contenet is added by ajax functionality
</div>
<script type="text/javascript">
$(function(){
$('._div_change').addClass('.div_class');
});
</script>
</body>
Loading first time & class is added by fn() |only div innerHTML modified by ajax ***
|
<div class="_div_change div_class"> | <div class="_div_change">
innerHTML elements added successfully| innerHTML elements altered successfully
</div> | </div>
答案 0 :(得分:1)
您的脚本不完整,但假设它看起来像这样:
$(function(){
$('._div_change').addClass('.div_class');
});
...然后你正在做的是告诉jQuery在最初加载DOM时运行该函数一次(使用函数调用$()
是{{{{ 3}})。如果要在通过ajax更新div
的内容时重新运行该函数,则必须在ajax调用的success
处理程序中执行此操作。
你可以给jQuery一个函数,它会在任何ajax调用完成后通过jQuery.ready
调用,这可能很有用。
答案 1 :(得分:1)
是的,代码只在页面加载时运行一次。
$(function(){...});
是连接文档的就绪事件的简短形式:$(document).ready(function(){...});
。
如果更改DOM并希望将jQuery代码应用于新元素,则应使用父元素作为范围重新运行代码。使用代码和范围参数创建一个函数:
function updateElements(scope) {
$('._div_change', scope).addClass('.div_class');
}
现在,您可以从ready事件运行该函数,并将文档作为范围:
$(function(){
updateElements(document);
});
当您将新内容加载到元素中时,假设使用id="asdf"
,您可以使用该元素作为范围重新运行该函数,并且它仅将更改应用于新添加的内容:
updateElements($('#asdf'));