看板 Mesak
作者 標題 [JS] jquery expander
時間 2013年04月28日 Sun. PM 11:06:05
http://plugins.learningjquery.com/expander/index.html
個人修正版
/*!
* Expander - v1.4.5.1 - 2013-04-28
* http://plugins.learningjquery.com/expander/
* Copyright (c) 2013 Karl Swedberg
* Edit By Mesak Chuang http://about.me/mesak
* Licensed MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(function(c){c.expander={version:"1.4.5.1",defaults:{slicePoint:100,preserveWords:!0,widow:4,expandText:"read more",expandPrefix:"… ",expandAfterSummary:!1,summaryClass:"summary",detailClass:"details",moreClass:"read-more",lessClass:"read-less",collapseTimer:0,expandEffect:"slideDown",expandSpeed:250,collapseEffect:"slideUp",collapseSpeed:200,userCollapse:!0,userCollapseText:"read less",userCollapsePrefix:" ",onSlice:null,beforeExpand:null,afterExpand:null,onCollapse:null,afterCollapse:null}}; c.fn.expander=function(f){function w(a,k){a.lastIndexOf("<")>a.lastIndexOf(">")&&(a=a.slice(0,a.lastIndexOf("<")));k&&(a=a.replace(t,""));return c.trim(a)}function x(a,c){c.stop(!0,!0)[a.collapseEffect](a.collapseSpeed,function(){c.prev("span."+a.moreClass).show().length||c.parent().children("div."+a.summaryClass).show().find("span."+a.moreClass).show();a.afterCollapse&&a.afterCollapse.call(c)})}var m="init";"string"===typeof f&&(m=f,f={});var u=c.extend({},c.expander.defaults,f),F=/^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i, t=u.wordEnd||/(&(?:[^;]+;)?|[a-zA-Z\u00C0-\u0100]+)$/,y=/<\/?(\w+)[^>]*>/g,z=/<(\w+)[^>]*>/g,A=/<\/(\w+)>/g,B=/(<\/[^>]+>)\s*$/,G=/^(<[^>]+>)+.?/,C;f={init:function(){this.each(function(){var a,k,g,j,f,h,l,n,m,D=[],r=[],p={},q=this,d=c(this),E=c([]),b=c.extend({},u,d.data("expander")||c.meta&&d.data()||{});h=!!d.find("."+b.detailClass).length;l=!!d.find("*").filter(function(){var a=c(this).css("display");return/^block|table|list/.test(a)}).length;var s=(l?"div":"span")+"."+b.detailClass;a=b.moreClass+ "";k=b.lessClass+"";var t=b.expandSpeed||0,e=c.trim(d.html());j=c.trim(d.text());if("string"==typeof b.slicePoint){var v=b.slicePoint;b.slicePoint=j.indexOf(v);if(-1==b.slicePoint)return;j=j.replace(v,"");e=e.replace(v,"")}summaryText=e.slice(0,b.slicePoint);b.moreSelector="span."+a.split(" ").join(".");b.lessSelector="span."+k.split(" ").join(".");if(!c.data(this,"expanderInit")){c.data(this,"expanderInit",!0);c.data(this,"expander",b);c.each(["onSlice","beforeExpand","afterExpand","onCollapse", "afterCollapse"],function(a,d){p[d]=c.isFunction(b[d])});summaryText=w(summaryText);for(k=summaryText.replace(y,"").length;k<b.slicePoint;)a=e.charAt(summaryText.length),"<"===a&&(a=e.slice(summaryText.length).match(G)[0]),summaryText+=a,k++;summaryText=w(summaryText,b.preserveWords);j=summaryText.match(z)||[];f=summaryText.match(A)||[];g=[];c.each(j,function(a,b){F.test(b)||g.push(b)});j=g;k=f.length;for(a=0;a<k;a++)f[a]=f[a].replace(A,"$1");c.each(j,function(a,b){var d=b.replace(z,"$1"),e=c.inArray(d, f);-1===e?(D.push(b),r.push("</"+d+">")):f.splice(e,1)});r.reverse();if(h)h=d.find(s).remove().html(),summaryText=d.html(),e=summaryText+h,a="";else{h=e.slice(summaryText.length);a=c.trim(h.replace(y,""));if(""===a||a.split(/\s+/).length<b.widow)return;a=r.pop()||"";summaryText+=r.join("");h=D.join("")+h}k=b;d.find(b.moreSelector).length?j="":(j='<span class="'+b.moreClass+'">'+b.expandPrefix,j+='<a href="#">'+b.expandText+"</a></span>");k.moreLabel=j;l&&(h=e);summaryText+=a;b.summary=summaryText; b.details=h;b.lastCloseTag=a;p.onSlice&&(b=(g=b.onSlice.call(q,b))&&g.details?g:b);e=b;h="span";a=e.summary;l?(h="div",a=B.test(a)&&!e.expandAfterSummary?a.replace(B,e.moreLabel+"$1"):a+e.moreLabel,a='<div class="'+e.summaryClass+'">'+a+"</div>"):a+=e.moreLabel;l=[a,"<",h+' class="'+e.detailClass+'"',">",e.details,"</"+h+">"].join("");d.html(l);n=d.find(s);m=d.find(b.moreSelector);if("slideUp"===b.collapseEffect&&"slideDown"!==b.expandEffect||d.is(":hidden"))n.css({display:"none"});else n[b.collapseEffect](0); E=d.find("div."+b.summaryClass);l=function(a){a.preventDefault();m.hide();E.hide();p.beforeExpand&&b.beforeExpand.call(q);n.stop(!1,!0)[b.expandEffect](t,function(){n.css({zoom:""});p.afterExpand&&b.afterExpand.call(q);var a=b;a.collapseTimer&&(C=setTimeout(function(){x(a,n);c.isFunction(a.onCollapse)&&a.onCollapse.call(q,!1)},a.collapseTimer))})};m.find("a").unbind("click.expander").bind("click.expander",l);b.userCollapse&&!d.find(b.lessSelector).length&&d.find(s).append('<span class="'+b.lessClass+ '">'+b.userCollapsePrefix+'<a href="#">'+b.userCollapseText+"</a></span>");d.find(b.lessSelector+" a").unbind("click.expander").bind("click.expander",function(a){a.preventDefault();clearTimeout(C);a=c(this).closest(s);x(b,a);p.onCollapse&&b.onCollapse.call(q,!0)})}})},destroy:function(){this.each(function(){var a,f,g=c(this);g.data("expanderInit")&&(a=c.extend({},g.data("expander")||{},u),f=g.find("."+a.detailClass).contents(),g.removeData("expanderInit"),g.removeData("expander"),g.find(a.moreSelector).remove(), g.find("."+a.summaryClass).remove(),g.find("."+a.detailClass).after(f).remove(),g.find(a.lessSelector).remove())})}};f[m]&&f[m].call(this);return this};c.fn.expander.defaults=c.expander.defaults})(jQuery);
* Expander - v1.4.5.1 - 2013-04-28
* http://plugins.learningjquery.com/expander/
* Copyright (c) 2013 Karl Swedberg
* Edit By Mesak Chuang http://about.me/mesak
* Licensed MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(function(c){c.expander={version:"1.4.5.1",defaults:{slicePoint:100,preserveWords:!0,widow:4,expandText:"read more",expandPrefix:"… ",expandAfterSummary:!1,summaryClass:"summary",detailClass:"details",moreClass:"read-more",lessClass:"read-less",collapseTimer:0,expandEffect:"slideDown",expandSpeed:250,collapseEffect:"slideUp",collapseSpeed:200,userCollapse:!0,userCollapseText:"read less",userCollapsePrefix:" ",onSlice:null,beforeExpand:null,afterExpand:null,onCollapse:null,afterCollapse:null}}; c.fn.expander=function(f){function w(a,k){a.lastIndexOf("<")>a.lastIndexOf(">")&&(a=a.slice(0,a.lastIndexOf("<")));k&&(a=a.replace(t,""));return c.trim(a)}function x(a,c){c.stop(!0,!0)[a.collapseEffect](a.collapseSpeed,function(){c.prev("span."+a.moreClass).show().length||c.parent().children("div."+a.summaryClass).show().find("span."+a.moreClass).show();a.afterCollapse&&a.afterCollapse.call(c)})}var m="init";"string"===typeof f&&(m=f,f={});var u=c.extend({},c.expander.defaults,f),F=/^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i, t=u.wordEnd||/(&(?:[^;]+;)?|[a-zA-Z\u00C0-\u0100]+)$/,y=/<\/?(\w+)[^>]*>/g,z=/<(\w+)[^>]*>/g,A=/<\/(\w+)>/g,B=/(<\/[^>]+>)\s*$/,G=/^(<[^>]+>)+.?/,C;f={init:function(){this.each(function(){var a,k,g,j,f,h,l,n,m,D=[],r=[],p={},q=this,d=c(this),E=c([]),b=c.extend({},u,d.data("expander")||c.meta&&d.data()||{});h=!!d.find("."+b.detailClass).length;l=!!d.find("*").filter(function(){var a=c(this).css("display");return/^block|table|list/.test(a)}).length;var s=(l?"div":"span")+"."+b.detailClass;a=b.moreClass+ "";k=b.lessClass+"";var t=b.expandSpeed||0,e=c.trim(d.html());j=c.trim(d.text());if("string"==typeof b.slicePoint){var v=b.slicePoint;b.slicePoint=j.indexOf(v);if(-1==b.slicePoint)return;j=j.replace(v,"");e=e.replace(v,"")}summaryText=e.slice(0,b.slicePoint);b.moreSelector="span."+a.split(" ").join(".");b.lessSelector="span."+k.split(" ").join(".");if(!c.data(this,"expanderInit")){c.data(this,"expanderInit",!0);c.data(this,"expander",b);c.each(["onSlice","beforeExpand","afterExpand","onCollapse", "afterCollapse"],function(a,d){p[d]=c.isFunction(b[d])});summaryText=w(summaryText);for(k=summaryText.replace(y,"").length;k<b.slicePoint;)a=e.charAt(summaryText.length),"<"===a&&(a=e.slice(summaryText.length).match(G)[0]),summaryText+=a,k++;summaryText=w(summaryText,b.preserveWords);j=summaryText.match(z)||[];f=summaryText.match(A)||[];g=[];c.each(j,function(a,b){F.test(b)||g.push(b)});j=g;k=f.length;for(a=0;a<k;a++)f[a]=f[a].replace(A,"$1");c.each(j,function(a,b){var d=b.replace(z,"$1"),e=c.inArray(d, f);-1===e?(D.push(b),r.push("</"+d+">")):f.splice(e,1)});r.reverse();if(h)h=d.find(s).remove().html(),summaryText=d.html(),e=summaryText+h,a="";else{h=e.slice(summaryText.length);a=c.trim(h.replace(y,""));if(""===a||a.split(/\s+/).length<b.widow)return;a=r.pop()||"";summaryText+=r.join("");h=D.join("")+h}k=b;d.find(b.moreSelector).length?j="":(j='<span class="'+b.moreClass+'">'+b.expandPrefix,j+='<a href="#">'+b.expandText+"</a></span>");k.moreLabel=j;l&&(h=e);summaryText+=a;b.summary=summaryText; b.details=h;b.lastCloseTag=a;p.onSlice&&(b=(g=b.onSlice.call(q,b))&&g.details?g:b);e=b;h="span";a=e.summary;l?(h="div",a=B.test(a)&&!e.expandAfterSummary?a.replace(B,e.moreLabel+"$1"):a+e.moreLabel,a='<div class="'+e.summaryClass+'">'+a+"</div>"):a+=e.moreLabel;l=[a,"<",h+' class="'+e.detailClass+'"',">",e.details,"</"+h+">"].join("");d.html(l);n=d.find(s);m=d.find(b.moreSelector);if("slideUp"===b.collapseEffect&&"slideDown"!==b.expandEffect||d.is(":hidden"))n.css({display:"none"});else n[b.collapseEffect](0); E=d.find("div."+b.summaryClass);l=function(a){a.preventDefault();m.hide();E.hide();p.beforeExpand&&b.beforeExpand.call(q);n.stop(!1,!0)[b.expandEffect](t,function(){n.css({zoom:""});p.afterExpand&&b.afterExpand.call(q);var a=b;a.collapseTimer&&(C=setTimeout(function(){x(a,n);c.isFunction(a.onCollapse)&&a.onCollapse.call(q,!1)},a.collapseTimer))})};m.find("a").unbind("click.expander").bind("click.expander",l);b.userCollapse&&!d.find(b.lessSelector).length&&d.find(s).append('<span class="'+b.lessClass+ '">'+b.userCollapsePrefix+'<a href="#">'+b.userCollapseText+"</a></span>");d.find(b.lessSelector+" a").unbind("click.expander").bind("click.expander",function(a){a.preventDefault();clearTimeout(C);a=c(this).closest(s);x(b,a);p.onCollapse&&b.onCollapse.call(q,!0)})}})},destroy:function(){this.each(function(){var a,f,g=c(this);g.data("expanderInit")&&(a=c.extend({},g.data("expander")||{},u),f=g.find("."+a.detailClass).contents(),g.removeData("expanderInit"),g.removeData("expander"),g.find(a.moreSelector).remove(), g.find("."+a.summaryClass).remove(),g.find("."+a.detailClass).after(f).remove(),g.find(a.lessSelector).remove())})}};f[m]&&f[m].call(this);return this};c.fn.expander.defaults=c.expander.defaults})(jQuery);
--
Mesak Blog
http://mesak.oow.me
--
※ 作者: mesak 時間: 2013-04-28 23:06:06
※ 看板: Mesak 文章推薦值: 0 目前人氣: 0 累積人氣: 128
回列表(←)
分享