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の質問は役立つかもしれません。
  2. これもそうです
  3. これは、特に単語数によってそれを行ういくつかのコードです。

リンクをクリックするだけでより多くのテキストを表示する限り、私が提案するのは、データベースから文字列を1回ロードし、その出力をフォーマットすることです。文字列が次の場合:

これは私のデータベースから取得した文字列全体です。

次に、次のコードは次のようにフォーマットされます。

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を使用して2番目のデータベース要求を行うことなく、ソリューションの詳細を非表示または表示できます。次の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

Use this function :

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 に答える