我正在尝试使用Ajax Loads(主要是通过jQuery)来使我的网站更有效。想知道是否有人可以为使用Ajax提供任何"最佳实践"?
有没有一种方法可以简化多个AJAX调用的脚本?例如,我目前有工作脚本:
$(document).ready(function() {
$('#dog').click(function () {
$('#body').load("dog.html");
});
$('#cat').click(function () {
$('#body').load("cat.html");
});
$('#bird').click(function () {
$('#body').load("bird.html");
});
$('#lizard').click(function () {
$('#body').load("lizard.html");
});
});
随着每个附加功能,脚本越来越长。是否有一种更简单,更有效的方法来编写此脚本以涵盖多个加载脚本?
另外,我是否应该使用Ajax负载来替换大多数实际链接?
这是一个建议,因为您发布的代码似乎在id
和filename
之间具有模式:
$(document).ready(function () {
$(document).on('click', 'commonParentElementHere', function (e) {
$('#body').load(e.target.id + ".html");
});
});
此建议使用.on(),您只需要添加一个元素的commonParentElementHere
,ID或一类。
另一个选项是在应单击的所有元素上使用类,然后使用将ID传递给HTML文件名的代码,例如:
$(document).ready(function () {
$(document).on('click', '.theCOmmonClass', function () {
$('#body').load(this.id + ".html");
});
});
我会说给您要单击类的所有元素,然后说ajax
。
$(document).ready(function() {
$('.ajax').click(function () {
$('#body').load(this.id + ".html");
});
});
假设id
匹配文件名,可以简化脚本为:
$(document).ready(function() {
$('#dog,#cat,#bird,#lizard').click(function () {
var fileName = this.id + ".html";
$('#body').load(fileName);
});
});
此脚本只需在单个选择器中指定每个id
,该选择器将每个id
与逗号分开。这将调用要为每个元素触发的click
函数。随着单击事件附加匿名函数,获得并加入每个元素的id
以创建文件名,然后传递给load
函数。
如果id
不总是匹配element
,则可以使用以下方法。
var mappings = [
{id: "fileName1", file:"file.html"},
{id: "fileName2", file:"file2.html"}
];
$(document).ready(function() {
for(var i = 0; i < mappings; i++){
createMapping(mappings[i]);
}
function createMapping(mapping){
$("#" + mapping.id).click(function(){
$('#body').load(mapping.file);
});
}
});