1

我在数据库中有一段类似的

$str =“这是我很快显示的一段,当我点击更多视图时,它将完全显示我正在使用 ajax 并检索它”

我像这样展示

这是我很快展示的一段

用于显示第一个单词的 php 是

function chop_string($str, $x)// i called the function  
{
    $string = strip_tags(stripslashes($string)); 
    return substr($string, 0, strpos(wordwrap($string, $x), "\n"));
}

当用户点击view more它时,它将显示其余部分,但问题在于如何跳过它this is a paragraph i show shortly 并显示其余部分

我想$x在点击后显示段落view more

4

4 回答 4

5

对于按单词数量的字符截断字符串:

  1. 这个SO question可能会有所帮助。
  2. 就像这个一样。
  3. 这是一些专门按字数计算的代码。

至于在单击链接时显示更多文本,我建议从数据库中加载一次字符串并格式化它的输出。如果你的字符串是:

这是从我的数据库中提取的整个字符串。

那么下面的代码将被格式化为:

HTML

<p class="truncate">This is the whole string <a class="showMore">Show more...</a><span> pulled from my database.</span></p>

CSS

p.truncate span { display: none; }

这样,您可以使用 Javascript(最好通过我为下面的代码选择的 jQuery 之类的库)来隐藏或显示更多您的解决方案,而无需使用 AJAX 发出第二个数据库请求。以下 Javascript 将满足您的要求:

$("a.showMore").on("click", function() {
    $(this).parent().find("span").contents().unwrap();
    $(this).remove();
});

这是一个可以玩的小提琴!

于 2012-07-09T04:31:57.707 回答
2

我在这里做了一个例子:shaquin.tk/experiments/showmore.html

您可以查看源代码以查看其背后的所有代码。PHP 代码显示在页面上。

如果您不想在Show more单击时显示起始字符串,请将 JavaScript 函数替换为showMore

function showMore() {
    if(state == 0) {
        state = 1;
        document.getElementById('start').style.display = 'none';
        document.getElementById('end').style.display = 'block';
        document.getElementById('showmore').innerHTML = 'Show less';
        document.getElementById('text-content').className = 'expanded';
        document.getElementById('start').className = 'expanded';
    } else {
        state = 0;
        document.getElementById('start').style.display = 'block';
        document.getElementById('end').style.display = 'none';
        document.getElementById('showmore').innerHTML = 'Show more';
        document.getElementById('text-content').className = '';
        document.getElementById('start').className = '';
    }
}

希望这可以帮助。

于 2012-07-09T05:44:06.263 回答
1

使用此功能:

function trim_text($string, $word_count)
{
   $trimmed = "";
   $string = preg_replace("/\040+/"," ", trim($string));
   $stringc = explode(" ",$string);
   //echo sizeof($stringc);
   //echo "&nbsp;words <br /><br />";
   if($word_count >= sizeof($stringc))
   {
       // nothing to do, our string is smaller than the limit.
     return $string;
   }
   elseif($word_count < sizeof($stringc))
   {
       // trim the string to the word count
       for($i=0;$i<$word_count;$i++)
       {
           $trimmed .= $stringc[$i]." ";
       }

       if(substr($trimmed, strlen(trim($trimmed))-1, 1) == '.')
         return trim($trimmed).'..';
       else
         return trim($trimmed).'...';
   }
}
于 2012-07-09T05:04:10.720 回答
0
$wordsBefore = 3;
$numOfWords = 7;
implode(' ', array_slice(explode(' ', $sentence), $wordsBefore, $wordsBefore+$numOfWords));

如果你将它保存到一个名为 sentence 的变量中,这将返回一个句子的前 7 个单词。

于 2012-07-09T04:31:50.893 回答