截断带有阅读更多链接的字符,点击时使用jQuery尊重段落标签

问题描述:

请参阅fiddle截断带有阅读更多链接的字符,点击时使用jQuery尊重段落标签

你会注意到一个div标签中有两个段落标签。我希望阅读更多的工作,因为它是目前,但当你点击阅读更多链接它显示与HTML文本。目前它似乎剥离<p>标签,但我需要他们留下来。

var shortenP = function(options) { 

     options = $.extend({ 
     length: 160, 
     ellipsis: ' [...]', 
     moreClass: 'more-link', 
     moreText: 'Read More' 
    }, options); 

    $('div').each(function() { 

     var $p = $(this); 
     var text = $p.text(); 
     var shortString = text.substring(0, options.length) + options.ellipsis; 
     $p.data('fulltext', text); 
     $p.text(shortString); 
     $('<a/>').attr({ 
      href: '#', 
      'class': options.moreClass 
     }).text(options.moreText). 
     insertAfter($p); 
     $p.next().click(function(e) { 

     $p.text($p.data('fulltext')); 
     e.preventDefault(); 
     }); 

    }); 

    }; 

    shortenP(); 

    <div> 
     <p>Rhoncus dolor porta pellentesque nec arcu! Tincidunt porttitor! Proin magnis elit diam  penatibus lundium, integer et, mauris a! Augue porta. Nec integer placerat integer? Ut aliquet montes lorem, duis nascetur! Facilisis risus magnis in aliquam non, eros elementum augue pid! Etiam adipiscing lacus parturient aliquam ultricies tortor lectus sagittis turpis diam, pulvinar. Rhoncus vel!</p> 

     <p>Scelerisque porttitor ac tristique cum! Magnis porta rhoncus cum augue amet, in nec, magna! Odio? Integer in. Nec pulvinar, ac cursus est, enim? Placerat lundium! Egestas vel mus tempor, ultrices auctor, magnis mauris? Adipiscing habitasse est enim massa et! Hac in odio scelerisque. Duis turpis nisi, mauris, natoque, tortor, dis?</p> 
    </div> 

不知道你的意思是这样的:Fiddle

只是调整,以保持段落标记与附加功能反转义HTML和获取的HTML而不是文本。

var shortenP = function(options) { 

options = $.extend({ 
    length: 160, 
    ellipsis: ' [...]', 
    moreClass: 'more-link', 
    moreText: 'Read More' 
}, options); 

$('div').each(function() { 

    var $p = $(this); 
    var text = $p.html(); 
    var shortString = text.substring(0, options.length) + options.ellipsis; 
    $p.data('fulltext', text); 
    $p.html(unescapeHtml(shortString)); 
    $('<a/>').attr({ 
     href: '#', 
     'class': options.moreClass 
    }).html(options.moreText). 
    insertAfter($p); 
    $p.next().click(function(e) { 

     $p.html($p.data('fulltext')); 
     e.preventDefault(); 
    }); 

}); 

}; 

shortenP(); 
function unescapeHtml(text) { 
return text.replace(/&amp;/g, '&') 
    .replace(/&lt;/g, '<') 
    .replace(/&gt;/g, '>') 
    .replace(/&quot;/g, '"') 
    .replace(/&#039;/g, "'"); 
} 
+0

@Noctane很高兴能有所帮助,不知道是不是你想要的结果。 – 2014-09-18 20:46:42

+0

这就是它,谢谢你。我试图将你的答案标记为答案,但不管因为什么原因,我都不会让我。 – Blindsyde 2015-07-02 21:59:07

+0

@Noctane谢谢你让我知道,但答案_is_已被标记/接受 - 我刚刚检查了声誉历史,并于9月18日接受了它,所以一切都很好。 – 2015-07-02 22:27:54