views:

680

answers:

3

How to generate page numbers like the below using javascript/jquery?

If the 5 th page is selected i have to show 3,4 and 6,7 and also 1,last page with prev,next... Any suggestion....

EDIT:

How to work with json data that use these pagination div? (ie) My json data contains 50 records I want to 10 in page 1 and so on... How to paginate json data with these numbers...

I want a jquery function to pass currentpageno,lastpagenumber and the function should generate me page numbers like the below for me

If it is the first page

istpage

If it is in the middle,

Pager

If it is the last page,

lastpage

Second EDIT:

I have tried this function but doesn't seem to get the desired result

function generatePages(currentPage, LastPage) {
    if (LastPage <= 5) {
        var pages = '';
        for(var i=1;i<=5;i++)
        {
            pages += "<a class='page-numbers' href='#'>" + i + "</a>"
        }
        $("#PagerDiv").append(pages);
    }
    if (LastPage > 5) {
        var pages = '';
        for (var i = 1; i <= 5; i++) {
            pages += "<a class='page-numbers' href='#'>" + i + "</a>"
        }
        $("#PagerDiv").append(pages);
    }
}

I have the lastPage and currentPage values please help me out getting this...

+10  A: 

What you are looking for is called "pagination" and there's (as always) a jQuery plugin that does the job for you:

http://d-scribe.de/webtools/jquery-pagination/demo/demo_options.htm

(Download it here)


Edit: Since you don't seem to be able to get it working, here is one way (of several different) how you can use the plugin.

Step 1: Generate markup from your JSON-data like the following:

<div id="display">
    <!-- This is the div where the visible page will be displayed -->
</div>

<div id="hiddenData">
    <!-- This is the div where you output your records -->
    <div class="record">
        <!-- create one record-div for each record you have in your JSON data -->
    </div>
    <div class="record">
    </div>
</div>

The idea is to copy the respective record to the display div when clicking on a page-link. Therefore, the plugin offers a pageSelect-callback function. Step 2 is to implement this function, for instance:

function pageselectCallback(pageIndex, jq){
    // Clone the record that should be displayed
    var newContent = $('#hiddenData div.record:eq('+pageIndex+')').clone();
    // Update the display container
    $('#display').empty().append(newContent);
    return false;
}

This would mean that you have one page per record. If you want to display multiple records per page, you have to modify the above function accordingly.

The third and final step is to initialize the whole thing correctly.

function initPagination() {
    // Hide the records... they shouldn't be displayed
    $("#hiddenData").css("display", "none");
    // Get the number of records
    var numEntries = $('#hiddenData div.result').length;
    // Create pagination element
    $("#pagination").pagination(numEntries, {
        num_edge_entries: 2,
        num_display_entries: 8, // number of page links displayed 
        callback: pageselectCallback,
        items_per_page: 1  // Adjust this value if you change the callback!
    });
}

So, you just have to generate the HTML markup from your JSON data and call the init-function afterwards.

It's not that difficult, is it?

Mef
@Mef will it work with json data
bala3569
json doesn't make any difference, so yes, it will work. Have a look at the sources of the demo page (the members.js, specifically). It shows you how to load data on demand...
Mef
@Mef documentation would be useful?
bala3569
http://d-scribe.de/webtools/jquery-pagination/lib/jquery_pagination/README
Mef
@Mef it worked.. Thanks for the link jquery pagination plugin works...
bala3569
@Mef one more issue with pagination plugin... Please look at this http://stackoverflow.com/questions/2551146/callback-function-in-jquery-doesnt-seem-to-work
bala3569
+3  A: 

yeah @SLaks is right. nothing too crazy here. You will have 2 variables currentPageNumber and lastPageNumber.

$("div.paginator").append("<a...>prev</a>");
$("div.paginator").append("<a...>1</a>");

for (x = (currentPageNumber - 2; x <= (currentPageNumber + 2); x++) {
    $("div.paginator").append("<a...>"+ x +"</a>");
} 

$("div.paginator").append("<a...>"+ lastPageNumber +"</a>");
$("div.paginator").append("<a...>next</a>");

// you could apply styles to and a tag in the div.paginator
// you could apply a special class to the a tag that matches the currentPageNumber 
// you can also bind some click events to each a tag and use the $(this).text() to grab the number of the page to go to
mschmidt42
Yeah, or you could just do what @Mef said. That is pretty dope. Welcome to the days of not having to write you own code. Community/Social Programming ROCKS!
mschmidt42
@mschnidt42 how can i use these numbers with json data...
bala3569
However, the most essential part is missing here. Where do the page numbers come from?
Mef
@Mef i use asp.net and i move my values using a hiddenfield and fetch them in jquery...
bala3569
oh, I didn't mean you, actually I referred to the sample code which is of course right, but covers only a very small part of the problem
Mef
@Mef i tried your and got this...http://img709.imageshack.us/img709/9509/pager2.jpg
bala3569
@mschmidt42 look at my edit...
bala3569
A: 

Use THIS or THAT plugin. They're both easy html pagination plugins. Put everything in the html at once and paginate with one of those.

naugtur