问题描述
为什么,我对这段代码有问题,它只隐藏div的第一个p,我的div包含不同的标题和段落,我想隐藏所有前180个字符,但只隐藏第一个li
<div class="product-short-description">
<h5>Product Description</h5>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<h5>Product Details</h5>
<p>Material: Aluminium</p>
<p>Warranty: One Year Warranty Guarantee</p>
<p>Original: China</p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<h5>Shipping @R_643_4045@ion</h5>
</ul>
</div>
function bbloomer_woocommerce_short_description_truncate_read_more() {
wc_enqueue_js('
var show_char = 180;
var ellipses = "... ";
var content = $(".product-short-description").html();
//var content = $(".product-short-description").text().length
alert(content);
if (content.length > show_char) {
var a = content.substr(0,show_char);
var b = content.substr(show_char - content.length);
var html = a + "<div class=\'truncated\'>" + ellipses + "<a class=\'read-more\'>Read more</a></div><div class=\'truncated\' style=\'display:none\'>" + b + "</div>";
$(".product-short-description").html(html);
}
$(".read-more").click(function(e) {
e.preventDefault();
$(".product-short-description .truncated").toggle();
});
');
}
解决方法
以PHP / HTML显示 WP功能=> https://developer.wordpress.org/reference/functions/wp_trim_words/
// PHP
$text = 'Lorem ipsum dolor';
$words = 2;
$more = ' … <a class=\'read-more\'>Read more</a>';
$excerpt = wp_trim_words( $text,$words,$more );
// $excerpt => Lorem ipsum … Read more
?>
<div class="product-short-description">
<div class="excerpt">
<?php echo $excerpt; ?>
</div>
<div class="truncated" style="display: none;">
<?php echo $text; ?>
</div>
</div>
JS中的动作
// JS
$(".read-more").click(function(e) {
e.preventDefault();
$(".product-short-description .truncated").toggle();
$(".product-short-description .excerpt").toggle();
});