我在尝试通过jQuery从XML文件中分页一些结果时遇到了麻烦,基本上我需要显示10个杂志封面,当用户点击上一个或下一个另外10个时,会显示相应的点击内容。这是我的代码:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "issues.xml",
dataType: "xml",
success: function(xml) {
var startIndex = 0; // gets edited via ui
var howMany = 10; // constant of how many per page, but you could make this a ui changeable thing too
var $issues = $(xml).find('issue'); //the resulting issues from the xml
var totalIssues = $issues.length;
var numPages = Math.ceil(totalIssues / howMany)
$('span.issuecount').html(+totalIssues+' Issues - '+numPages+' Pages');
var displayIssues = function() { // display the issues
var $issuesPaginated = $issues.slice( startIndex , ($issues.length - startIndex) + howMany );
$('#shelf-items li').fadeOut(500); // clear old issues
$issuesPaginated.each(function(){
var id = $(this).attr('id');
var date = $(this).find('date').text();
var cover = $(this).find('cover').text();
var issue = $(this).find('issuenumber').text();
var url = $(this).find('url').text();
$('<li id="'+id+'"></li>').html('<a href="'+url+'"><img src="images/covers/'+cover+'" alt="" /></a><br />'+date+' - #'+issue+'').fadeIn(500).appendTo('#shelf-items');
});
}
$('#prevIssueButton').click(function() {
if( startIndex < howMany) {
startIndex -= howMany;
displayIssues().fadeIn(500);
}else {
alert('No more previous issues'); // probably want to do something more elegant here, like start over at 0, etc..
}
});
$('#nextIssueButton').click(function() {
if( startIndex + howMany >= totalIssues) {
startIndex += howMany;
displayIssues();
}else {
alert('No more next issues'); // probably want to do something more elegant here, like start over at 0, etc..
}
});
displayIssues().fadeIn(500); // display for the first time (ajax call);
}
}); // end ajax call
}); // end document-ready
编辑:displayIssues()现在还有一个Javascript错误.fadeIn(500);
答案 0 :(得分:1)
$(xml).find('issue').each(function(){
可以成为:(使用.slice())
var startIndex = 0; //edit this via your ui
var howMany = 10;
var $issues = $(xml).find('issue');
var $issuesPaginated = $issues.slice( startIndex , ($issues.length - startIndex) + howMany );
$issuesPaginated.each(function(){
您使用的是服务器端吗?你能以这种方式促进分页,这样你就不会将所有数据加载到DOM中吗?
有关点击处理程序的请求帮助:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "issues.xml",
dataType: "xml",
success: function(xml) {
var startIndex = 0; // gets edited via ui
var howMany = 10; // constant of how many per page, but you could make this a ui changeable thing too
var $issues = $(xml).find('issue'); //the resulting issues from the xml
var totalIssues = $issues.length;
var displayIssues = function() { // display the issues
var $issuesPaginated = $issues.slice( startIndex , ($issues.length - startIndex) + howMany );
$('#shelf-items').html(''); // clear old issues
$issuesPaginated.each(function(){
var id = $(this).attr('id');
var date = $(this).find('date').text();
var cover = $(this).find('cover').text();
var issue = $(this).find('issuenumber').text();
var url = $(this).find('url').text();
$('<li id="'+id+'"></li>').html('<a href="'+url+'"><img src="images/covers/'+cover+'" alt="" /></a><br />'+date+' - #'+issue+'').appendTo('#shelf-items');
});
}
$('#prevIssueButton').click(function() {
if( startIndex < howMany) {
startIndex -= howMany;
displayIssues();
}else {
alert('No more previous issues'); // probably want to do something more elegant here, like start over at 0, etc..
}
});
$('#nextIssueButton').click(function() {
if( startIndex + howMany >= totalIssues) {
startIndex += howMany;
displayIssues();
}else {
alert('No more next issues'); // probably want to do something more elegant here, like start over at 0, etc..
}
});
displayIssues(); // display for the first time (ajax call);
}
}); // end ajax call
}); // end document-ready
答案 1 :(得分:0)
我通常处理跨越多个页面的大型数据集,因此我将索引参数包含在我的AJAX调用中。 (在服务器端也需要一些聪明的东西...)在你的情况下,你看起来像是在调用一个静态的xml文件,在这种情况下,我会放弃AJAX或让AJAX将结果转储到一个变量中可以在你的闲暇和你的控制下迭代。