一尘不染

使用jquery和HTML 5加载新零件时,javascript在新零件中不起作用

ajax

嗨,正如我的标题所建议的,我使用以下代码来动态加载页面的一部分(此处为ID)

function callBackFunctionLoadNextBackInPage(data)
{
    //alert(data);
    $("#left").fadeTo(100,1);
    var data = $(data).find( '#left' );
    $("#left").html(data);
    if(supports_history_api())
    {
        history.pushState(null, null, loadNextBackInPage_URL);  
        if(!popEventListnerAdded) {
            window.addEventListener("popstate", function(e) {
            loadNextBackInPage(location.href);
            },false);
            popEventListnerAdded = true;
        }

    }
    else
    {

    }
}
function loadNextBackInPage(url,parm)
{
    //alert(url);
    loadNextBackInPage_URL = url;
    $("#left").fadeTo(100,.2);
    $.post(url,parm,callBackFunctionLoadNextBackInPage,'html');
}

这是我的操作方法示例(单击显示详细信息链接)

问题是:

它加载正确…但是javascript无法正常工作。例如:1.我使用“讨论”来发表评论,但在以下部分中将不进行讨论

使用Facebook,Twitter,Yahoo!,DISQUS,OpenID或Anonymus添加评论

但是,如果刷新浏览器,它确实可以正确加载…我仅首先加载所有需要的脚本…那么为什么它不起作用?

另外例如:SHARE(单击此处)按钮应使用以下代码展开:

<script language="javascript" type="text/javascript">
function showHideDiv()
{
    var divstyle = new String();
    divstyle = document.getElementById("share").style.display;
    if(divstyle.toLowerCase()=="block" || divstyle == "")
    {
        document.getElementById("share").style.display = 'none';
    }
    else
    {
        document.getElementById("share").style.display = 'block';
    }
}
</script>

但是它没有!…但是如果我刷新页面(即再次加载该URL),则可以使用

主要是我希望讨论评论功能起作用。我使用以下代码生成它

<div class="entry">
  <h2>Add a Comment using Facebook, Twitter, Yahoo!, DISQUS, OpenID or Anonymus </h2>
  <p>


  <div id="disqus_thread"></div>
<script>
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = '[written here]'; // required: replace example with your forum shortname

    // The following are highly recommended additional parameters. Remove the slashes in front to use.
     var disqus_identifier = 'page=show_song_details.php&songid=<?php echo $sid ?>&n=0&back=no';
     var disqus_url = '<?php echo $main_root.$_SERVER['REQUEST_URI']; ?>';
    var disqus_developer = 1 ;
    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

  </p>


</div>

阅读 218

收藏
2020-07-26

共1个答案

一尘不染

问题在于,<script>只要您从HTML字符串创建jQuery对象以对其进行一些DOM操作,jQuery就会剥离标签.find()

最好的选择是将整个HTML阅读为文本,然后使用正则表达式将其切碎并将相关部分放入文档中。您还应该考虑重新设计项目的一部分,因为我认为用部分脚本加载外部页面的部分不是一个好习惯,从长期来看可能很难维护。除非当然是经过深思熟虑的模块化设计,否则您就知道并知道自己在做什么。

2020-07-26