2012-04-03 62 views

回答

0

另一種解決方案,似乎更加流暢; http://jsfiddle.net/RXnKR/6/

$('.more').each(function() { 
     var content = $(this).html(); 
     var height = $(this).height(); 
     $(this).data('fullheight', height); 

     if (content.length > showChar) { 

      var c = content.substr(0, showChar); 
      var h = content.substr(showChar - 1, content.length - showChar); 

      var html = c + '<span class="moreellipses">' + ellipsesText + '&nbsp;</span><span class="morecontent"><span>' + h + '</span>&nbsp;&nbsp;<a href="" class="morelink">' + moretext + '</a></span>'; 
      $(this).html(html); 
      var collapsedHeight = $(this).height(); 
      $(this).data('smallheight', collapsedHeight); 
     } 

    }); 

    $(".morelink").click(function() { 

     var parentMore = $(this).parents('.more'); 
     var more = $(this); 

     if (more.hasClass("less")) { 
       parentMore.animate({ 
        height: parentMore.data('smallheight') 
       }, 1000, function() { 
       more.removeClass("less"); 
       more.html(moretext); 
       }); 

     } else { 
       parentMore.animate({ 
        height: parentMore.data('fullheight') 
       }, 1000, function() { 
       more.addClass("less"); 
       more.html(lesstext); 
       }); 

     } 
1

在這裏你去:http://jsfiddle.net/RXnKR/5/

請記住,在這種情況下,「.morecontent跨度」必須有持續性的高度,否則在下次運行如果高度發生了變化,那麼文本的一部分可能會溢出其他元素,或者可能會有額外的空白。所以如果高度發生變化,你必須重新計算它。

雖然這不是問題,而且你還是收到了相當不錯的回報。下次發帖之前,我會諮詢faq