如何使用jQuery解决动态加载页面中的重复对象?
我想解决动态加载内容中的重复对象。请查看以下源代码,以便于理解。
<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个我不需要的对象。
<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>
我必须在动态加载内容(如以下代码)中为每个脚本创建指定的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。
回答:
以下函数将处理部分加载视图页面中的数据,并为脚本中的每个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);
});
});
以上是 如何使用jQuery解决动态加载页面中的重复对象? 的全部内容, 来源链接: utcz.com/qa/401226.html