I'm hoping some jQuery expert can help me out. I found a pager plugin that uses jQuery:
http://rikrikrik.com/jquery/pager/
I have the pager working, but it doesn't work exactly as I need.
It pages by html tag. So, if you have text with 8 paragrapths, it will page thru each paragraph.
Is there a way to modify the code to page by div height or character length?
This is very close to what I need, but I just need a way to show about 500 characters per page.
Here is the code:
$.fn.pager = function(clas, options) {
var settings = {
navId: 'nav',
navClass: 'nav',
navAttach: 'append',
highlightClass: 'highlight',
prevText: '«',
nextText: '»',
linkText: null,
linkWrap: null,
height: null
}
if(options) $.extend(settings, options);
return this.each( function () {
var me = $(this);
var size;
var i = 0;
var navid = '#'+settings.navId;
function init () {
size = $(clas, me).not(navid).size();
if(settings.height == null) {
settings.height = getHighest();
}
if(size > 1) {
makeNav();
show();
highlight();
}
sizePanel();
if(settings.linkWrap != null) {
linkWrap();
}
}
function makeNav () {
var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
str += '<a href="#" rel="prev">'+settings.prevText+'</a>';
for(var i = 0; i < size; i++) {
var j = i+1;
str += '<a href="#" rel="'+j+'">';
str += (settings.linkText == null) ? j : settings.linkText[j-1];
str += '</a>';
}
str += '<a href="#" rel="next">'+settings.nextText+'</a>';
str += '</div>';
switch (settings.navAttach) {
case 'before':
$(me).before(str);
break;
case 'after':
$(me).after(str);
break;
case 'prepend':
$(me).prepend(str);
break;
default:
$(me).append(str);
break;
}
}
function show () {
$(me).find(clas).not(navid).hide();
var show = $(me).find(clas).not(navid).get(i);
$(show).show();
}
function highlight () {
$(me).find(navid).find('a').removeClass(settings.highlightClass);
var show = $(me).find(navid).find('a').get(i+1);
$(show).addClass(settings.highlightClass);
}
function sizePanel () {
if($.browser.msie) {
$(me).find(clas).not(navid).css( {
height: settings.height
});
} else {
$(me).find(clas).not(navid).css( {
minHeight: settings.height
});
}
}
function getHighest () {
var highest = 0;
$(me).find(clas).not(navid).each(function () {
if(this.offsetHeight > highest) {
highest = this.offsetHeight;
}
});
highest = highest + "px";
return highest;
}
function getNavHeight () {
var nav = $(navid).get(0);
return nav.offsetHeight;
}
function linkWrap () {
$(me).find(navid).find("a").wrap(settings.linkWrap);
}
init();
$(this).find(navid).find("a").click(function () {
if($(this).attr('rel') == 'next') {
if(i + 1 < size) {
i = i+1;
}
} else if($(this).attr('rel') == 'prev') {
if(i > 0) {
i = i-1;
}
} else {
var j = $(this).attr('rel');
i = j-1;
}
show();
highlight();
return false;
});
});
} 1 protected void Page_Load(object sender, EventArgs e)
2 {
3 LoadScript();
4 }
5
6 protected void LoadScript()
7 {
8 ClientScriptManager csm = Page.ClientScript;
9 StringBuilder sb = new StringBuilder();
10
11 sb.Append("<script type=\"text/javascript\">\n");
12 sb.Append("$(document).ready(function () {\n");
13 sb.Append("$('#pnlTR').pager('p', { \n");
14 sb.Append("height: '20em'\n");
15 sb.Append("})\n");
16 sb.Append("})\n");
17 sb.Append("</script>");
18
19 csm.RegisterClientScriptBlock(this.GetType(), "sLoadString", sb.ToString());
20
21 }