jQuery fn()没有加载/工作?

时间:2011-04-29 08:05:18

标签: javascript jquery

有一个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>     

2 个答案:

答案 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'));