jQuery Paging Plugin

업데이트: 제이쿼리 페이징 플러그인 0.2.0 업데이트! 아래 설명 쌩까고 Github 으로 신속히 이동하라!

실무에 많이 쓰지만 은근히 빡센 페이징. 동적 페이징에 머리 짜매고 계신가? 여기 종결자가 있다.

jQuery Paging Plugin!

가볍다. 2KB밖에 안되며 gzip 압축 시 1KB도 안될 것이다.

빠르다. 페이징 외 쓰잘데기 없는 효과나 부가기능 따위는 없다.

쉽다. 한줄이면 페이징 초기화가 끝난다. 서버에서 불러와야 할 거는 현재 페이지와 총 페이지 수, 그뿐이다.

동적이던 정적이던 다 된다. 전통 방식 게시판이던 ajax 로 만든 게시판이던 입맛에 맞게 쓸 수 있다.

오픈소스다. 당신이 죽쓰던 밥쓰던 상관않는 MIT 라이센스다. 물론 더 좋은 방법 있으면 공유하는 것은 미덕!

사용법?

$(‘#paging’).paging({current:5,max:50}); //총 50 페이지 중 5 페이지로 시작하는 페이징을 불러올 것이다.

이거덕분에 프로젝트 잘되서 제작자한테 커피 한잔 쏘고 싶으면 ukjinplant at hotmail dot com 으로 연락해도 된다.

그럼 다운로드는?

소스(개발용) 다운로드 | 최적화(실무용) 다운로드 | 프로젝트 홈페이지

페이징 방식이 여러가진데 이 페이징 플러그인의 롤모델이 뭐인지 궁금하면 여기여기 를 클릭하여 확인해보라.

jQuery.Paging

jQuery를 위한 간단한 페이징.

사용법 : $('#paging').paging({max:50});

속성 :
item : 페이징 요소 태그명, 기본값 "a".
itemClass : 페이징 요소 중 페이지 수 CSS 클래스, 기본값 "paging-item".
itemCurrent : 현재 페이지를 나타내는 CSS 클래스이며 페이징 요소와 중첩됨, 기본값 "selected".
format : 페이지를 나타낼 내용, 기본값 "[%d]".
sideClass : 다음 또는 이전 버튼 CSS 클래스, 기본값 "paging-side".
next : 다음 버튼 내용. 기본값 "[{5}>]" ("[>]")
prev : 이전 버튼 내용. 기본값 "[{4}&lt;]" ("[<]")
first : 첫 페이지 내용. 기본값 "[1&lt;&lt;]"
last : 마지막 페이지 내용. 기본값 "[&gt;&gt;{6}]"
length : 페이지 표시할 개수. 기본값 10.
max : 최대 표현할 페이지 수. 기본값 1.
current : 현재 페이지 정의. 기본값 1.
href : a 태그일 때 링크 주소를 정의. 기본값 "#%d"
append : true 설정 시, 기존 내용을 삭제하지 않고 페이징을 포함시킴. 기본값 false.
event : 기본 이벤트 활성화. 새로고침 없이 동적으로 페이징 초기화됨. ajax에 유용. 기본값 true.
>event=true 일 때 가능한 이벤트 정의.
onclick : 페이징 버튼 클릭 시 호출. false 반환 시 동적으로 페이지가 바뀌지 않음. 동적 페이징을 원하지만
                  href로 인한 링크 이동을 원하지 않을 경우 이벤트 메서드인 event.stopPropagation() 호출.
onprev : 이전 버튼 초기화 시 이벤트. 'this' 는 이전 버튼 요소를 가리킴.(plain DOM. not jQuery!)
onnext : 다음 버튼 초기화 시 이벤트. 'this' 는 다음 버튼 요소를 가리킴.(plain DOM. not jQuery!)
onitem : 각 페이지 버튼 초기화 시 이벤트. 'this' 는 각 페이지 버튼 요소를 가리킴.

치환자 (format,next,prev,href,first,last 속성 전용)
{0} = 클릭 시 페이지
{1} = 페이지 길이
{2} = 처음 페이지
{3} = 마지막 페이지
{4} = 이전 파트의 마지막 페이지
{5} = 다음 파트의 처음 페이지
{6} = 맨 마지막 페이지

판올림 내역
0.1.0 : 초기 버전
0.1.5 :
처음 페이지 및 마지막 페이지 추가. 내용에 치환자 적용 가능.
'append' 옵션 추가 : true 설정 시 기존 내용이 삭제되지 않고 포함됨.
{6} 치환자는 마지막 페이지(max 값과 동일) 를 가리킴
0.1.6 : first 또는 last 내용에 false 설정시 만들지 않도록 기능 추가.

Comments

  1. 궁금합니다 - 2014년 1월 6일 @ 6:54 오전

    적용해보려고 따라하는데 사용법을 잘모르겠네요

    $(‘#paging’).paging({max:50}); 만 쓰면된다고 하셨는데 홈페이지가도 설명이 똑같아서요ㅠㅠㅠ
    jsp화면엔 div영역만 잡아주면 알아서 숫자를 그리나요? (1 2 3 4 5 ..10 이런식으로)

    이렇게 잡아주고 실행하니까 div영역에 아무값도 안생기네요 화면엔 어떤식으로 적용해야되나요?
    그리고 전체갯수는 어떻게설정하나요?
    Reply
    • composite - 2016년 6월 7일 @ 4:35 오후

      화면 별도로 세팅할 거 없습니다. 아래 경우일 수 있습니다.

      1. 자바스크립트 오류로 인한 중단

      2. 페이징을 넣을 div 에 속한 CSS (예:display:none 등)

      3. 페이징을 넣을 요소가 잘못 기입

      Reply
  2. jQuery paging plugin update | 위험한 블로그
  3. 푸르미 - 2016년 6월 6일 @ 7:37 오후

    버그 있네요

    max 101로 해보세요

    100페이지 선택할 경우 다음버튼이 생기지 않네요.

    Reply
    • composite - 2016년 6월 7일 @ 4:35 오후

      버그 제보는 감사합니다만 Github Issue 란에 기입해 주시면 감사하겠습니다.

      Reply
  4. kanitz - 2016년 6월 7일 @ 4:08 오후

    버그가 있어요 마지막 전 페이이 그러니까 위처럼 101개의 게시물을 10개씩 페이징을 하면 11개의 페이지가 되는데 10페이지에서 11페이지로 넘어가지 못하는 버그가 있네요

    전 jquery.paging.js 파일을 전 아래처럼 수정하여 사용하였습니다.

    var totalPage = Math.ceil(op.max/op.length);

    var currentPage = Math.ceil(op.current/op.length)

    if (currentPage < totalPage) {
    //if (op.current < op.max - op.length)) {
    if (op.end < op.max) {
    make(op, (op.end + 1), op.sideClass, op.next); //next button
    }
    if (op.last !== false) {
    make(op, op.max, op.sideClass, op.last); //last button
    }
    }

    소스 공개해주셔서 감사합니다.

    Reply
    • composite - 2016년 6월 7일 @ 4:37 오후

      버그 및 제안 감사합니다. Github 오픈소스인 만큼 Github Issue에 올려주시면 더욱 빠른 확인과 대응이 가능합니다.

      Reply
  5. 비J - 2017년 5월 19일 @ 12:16 오후

    처음,이전,다음,마지막 이런버튼들이 사라지지 않고 링크만 비활성된채 계속 보이게 하는 기능은 않되나요?

    Reply
    • composite - 2017년 5월 22일 @ 9:45 오전

      앞으로 github Issue 외에 어느 곳에 관련 질문이나 건의는 안받습니다.

      Reply
  6. 현대카드B2B_유과장 - 2017년 5월 23일 @ 9:00 오후

    고마워요. 100% 원하는 만큼은 만들지는 못했지만 그래도 덕분에 오늘 삽질을 많이 줄일 수 있었어요,

    Reply
    • composite - 2017년 7월 5일 @ 3:03 오후

      감사합니다. 플래시는 잘돌아가나요?

      Reply

답글 남기기

Your email address will not be published / Required fields are marked *