当前位置: 首页 > 面试题库 >

如何使用jQuery解决动态加载页面中的重复对象?

夏侯自珍
2023-03-14
问题内容

我想解决动态加载内容中的重复对象。请查看以下源代码,以便于理解。

具有1个动态加载内容的基本HTML

<body>
     <div id="general-div"></div>>
     <div id="div1"></div>
     <div id="placeholder1">
          Dynamic Content will be placed inside this.

          <div class="inner-div"></div>
          <div class="div1"></div>
     </div>
</body>

对于此页眉中的脚本,很容易选择“ general-div”对象,如以下代码所示。

 $('#general-div')

在占位符1中选择“ inner-div”对象非常容易。因此,我可以使用以下代码进行选择。

 $('.inner-div')

上面的代码可以完美地工作。但是,当同一文档中有多个重复的对象(如以下HTML)时,我将无法使用以上代码。上面的代码将返回2个我不需要的对象

基本页面HTML-加载另一个动态加载内容后

<body>
     <div id="general-div"></div>>
     <div id="div1"></div>
     <div id="placeholder1">
          Dynamic Content will be placed inside this.

          <div class="inner-div"></div>
          <div class="div1"></div>
     </div>
     <div id="placeholder2">
          Dynamic Content will be placed inside this.

          <div class="inner-div"></div>
          <div class="div1"></div>
     </div>
</body>

可能的解决方案1

我必须在动态加载内容(如以下代码)中为每个脚本创建指定的jQuery对象。

 // Deep copy for jQuery object.
 var specfiedjQueryObj = $.extend(true, {}, jQuery);

 // modify find function in jQuery object.
 specfiedjQueryObj.fn.find = function(selector)
 {
      // by adding placeholder selector before eval result.
      return new specfiedjQueryObj.fn.old_find('#placeholder1 ' + selector);
 };

 // So, I can select any object in dynamic loading content.
 (function($)
 {
      // This result must be 1 object.
      $('.div1'); 
 })(temp);

即使这样,该解决方案也应该很好用。但是我发现jQuery是一个非常复杂的对象。尝试使用它时发现很多错误。

您有解决这个问题的想法吗?

PS。 PlaceHolder ID不是固定ID。
因此,不可能将其固定在选择器规则中。而且,我不知道文件中元素的确切数量和位置(第一个,最后一个或中间)。由于动态加载,内容将显示在很多页面上。


问题答案:

以下函数将处理部分加载视图页面中的数据,并为脚本中的每个jQuery选择器添加指定的上下文。这个答案很好用。但是,它不支持外部脚本文件。

function renderPartialView(control, data)
{
    // For detecting all script tag in loaded data.
    var reExtractScript = /(<script type="text\/javascript">)([\s\S]+?)(<\/script>)/gi;

    // For detecting all "$" sign (must be jQuery object) in loaded data.
    var reFindDollarSign = /\$\(([\S]+?)\)/gi;

    // Find all matched string in loaded data.
    var result = reExtractScript.exec(data);
    var allScript = '';

    if (result)
    {
        for (i = 0; i < result.length; i += 4)
        {   
            // Remove current script from loaded script.        
            data = data.replace(result[i], '');

            // Replace all "$" function by adding context parameter that is control.
            allScript += result[i+2].replace(reFindDollarSign, '$($1, "' + control + '")');
        }
    }

    // Load non-script html to control.
    $(control).html(data);

    // Evaluate all script that is found in loaded data.
    eval(allScript);
}

// This script will partially download view page from server in the same domain
$(function()
{
    $.get(getUrl('~/Profile/Section/ViewEducation'), null, function(data)
    {
        // When partial loading is complete, all loaded data will be sent to “renderPartialView” function
        renderPartialView('#education-view', data);
    });
});


 类似资料:
  • 问题内容: 我试图做到这一点,所以当我单击HTML页面中的链接时,它会动态地将请求的页面加载到jQuery的div中。 我怎样才能做到这一点? 问题答案: 那里有一个叫做pjax的jQuery插件,它指出:“它是带有真正的永久链接,页面标题和完全退化的后退按钮的ajax。” 该插件使用HTML5 pushState和AJAX来动态更改页面,而无需完全加载。如果不支持pushState,则PJAX将

  • 问题内容: 我正在构建Java Web应用程序,并且我讨厌传统的“代码-编译-部署-测试”周期。我想输入一个微小的更改,然后立即查看结果,而无需编译和部署。 幸运的是,码头很适合这样做。这是一个纯Java Web服务器。它带有一个非常不错的maven插件,可让您直接从构建树中启动Jetty阅读- 无需打包war文件或部署。它甚至具有scanInterval设置:将其设置为非零值,它将监视您的Jav

  • 本文向大家介绍使用jQuery的load方法设计动态加载及解决被加载页面js失效问题,包括了使用jQuery的load方法设计动态加载及解决被加载页面js失效问题的使用技巧和注意事项,需要的朋友参考一下 一、问题分析 对于后台系统,相比大家都有所印象,知道其中的布局结构,如图: 在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,

  • 我有一个链接。当用户单击此链接时,页面将被重新加载。我是这样做的。。。。。。 html JS 在控制器中,我使用了javascript,这对我来说似乎很糟糕。我怎么能用angularjs做

  • 问题内容: 我有一个带有控制器的html文件和带有模板url的指令。我想有条件地在控制器中加载/编译指令: 控制器: 指示: 指令中使用的模板 我如何在TestController中编译代码,动态加载指令,最后加载内容并将内容附加到范围中? 问题答案: 这是一个抽象的通用模板,供您参考,并演示了一些Angular概念: JS HTML 请注意,没有控制器代码。这是因为 控制器永远不要操纵DOM-

  • 问题内容: 我们正在发出多个ajax请求,以“保存” Web应用程序中的数据,然后重新加载页面。我们遇到了这样一种情况:(由于请求是异步发出的)在ajax调用完成时或之前重新加载页面。一种简单的解决方案是使用“ async”:false选项启用ajax调用,从而强制进行同步调用。这似乎可行,但是在执行任何调用之前运行的对话框代码会延迟运行。 任何意见是极大的赞赏! 还应注意,在重新加载之前放置al