(
function
($) {
$.fn.readmore =
function
(settings) {
var
opts = $.extend({}, $.fn.readmore.defaults, settings);
this
.each(
function
() {
$(
this
).data(
"opts"
, opts);
if
($(
this
).html().length > opts.substr_len) {
abridge($(
this
));
linkage($(
this
));
}
});
function
linkage(elem) {
elem.append(elem.data(
"opts"
).more_link);
elem.children(
".more"
).click(
function
() {
$(
this
).hide();
$(
this
).siblings(
"span:not(.hidden)"
).hide().siblings(
"span.hidden"
).animate({
'opacity'
:
'toggle'
}, 1000);
});
}
function
abridge(elem) {
var
opts = elem.data(
"opts"
);
var
txt = elem.html();
var
len = opts.substr_len;
var
dots =
"<span>"
+ opts.ellipses +
"</span>"
;
var
charAtLen = txt.substr(len, 1);
while
(len < txt.length && !/\s/.test(charAtLen)) {
len++;
charAtLen = txt.substr(len, 1);
}
var
shown = txt.substring(0, len) + dots;
var
hidden =
'<span class="hidden" style="display:none;">'
+ txt.substring(len, txt.length) +
'</span>'
;
elem.html(shown + hidden);
}
return
this
;
};
$.fn.readmore.defaults = {
substr_len: 500,
ellipses:
'…'
,
more_link:
'<a class="more">Read More</a>'
};
})(jQuery);
$(
function
() {
$(
'#rm'
).readmore({
substr_len: 10,
more_link:
'<a class="more" href="http://google.com">更に読む</a>'
});
});