jqueryとCSSで指定幅に収まるように文字数を減らす・複数行対応

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>jqueryとCSSで指定幅に収まるように文字数を減らす・複数行対応</title>
  6. <script href="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  7. <style type="text/css">
  8.   html, body {
  9.     margin:0;
  10.     padding:0;
  11.   }
  12.   
  13.   .textOverflowLine {
  14.     overflow: hidden;
  15.     width: 400px;
  16.     border: 1px solid #ccc;
  17.     background: #eee;
  18.   }
  19. </style>
  20. <script type="text/javascript">
  21.   jQuery(function($) {
  22.     
  23.     $('.textOverflowLine').each(function() {
  24.       // 行数
  25.       var row = 4;
  26.       
  27.       var $target = $(this);
  28.       
  29.       // オリジナルの文章を取得する
  30.       var html = $target.html();
  31.       
  32.       var $clone = $target.clone();
  33.       $clone
  34.         .css({
  35.           display: 'none',
  36.           position : 'absolute',
  37.           overflow : 'visible'
  38.         })
  39.         .width($target.width())
  40.         .height('auto');
  41.       
  42.       $target.after($clone);
  43.       
  44.       // 必要な行数の高さを取得
  45.       var $temp = $clone.clone();
  46.       var _tempStr = "";
  47.       for (var i=0; i<row; i++) {
  48.         _tempStr += "あ<br>";
  49.       }
  50.       $temp.html(_tempStr);
  51.       $target.after($temp);
  52.       var targetHeight = $temp.height();
  53.       $temp.remove();
  54.       
  55.       // 指定した高さになるまで、1文字ずつ消去していく
  56.       while((html.length > 0) && ($clone.height() > targetHeight)) {
  57.         html = html.substr(0, html.length - 1);
  58.         
  59.         // 閉じタグの保管を考慮するためDOMに戻してから入れ直す
  60.         $clone.html($('<span>' + html + '</span>').html() + '...');
  61.       }
  62.       
  63.       // 文章を入れ替え
  64.       $target.html($clone.html());
  65.       
  66.       // 複製した要素を削除する
  67.       $clone.remove();
  68.     });
  69.   });
  70. </script>
  71. </head>
  72. <body>
  73. <div style="padding:10px;">
  74.   <h1>jqueryとCSSで指定幅に収まるように文字数を減らす・複数行対応</h1>
  75.   <div class="textOverflowLine">
  76.   むかしむかし、あるところに、おじいさんとおばあさんが住んでいました。<br />
  77.   おじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。<br />
  78.   おばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。<br />
  79.   「おや、これは良いおみやげになるわ」<br />
  80.   おばあさんは大きな桃をひろいあげて、家に持ち帰りました。<br />
  81.   そして、おじいさんとおばあさんが桃を食べようと桃を切ってみると、なんと中から元気の良い男の赤ちゃんが飛び出してきました。<br />
  82.   「これはきっと、神さまがくださったにちがいない」<br />
  83.   子どものいなかったおじいさんとおばあさんは、大喜びです。<br />
  84.   桃から生まれた男の子を、おじいさんとおばあさんは桃太郎と名付けました。<br />
  85.   桃太郎はスクスク育って、やがて強い男の子になりました。<br />
  86.   <br />
  87.   そしてある日、桃太郎が言いました。<br />
  88.   「ぼく、鬼ヶ島(おにがしま)へ行って、わるい鬼を退治します」<br />
  89.   おばあさんにきび団子を作ってもらうと、鬼ヶ島へ出かけました。<br />
  90.   旅の途中で、イヌに出会いました。<br />
  91.   「桃太郎さん、どこへ行くのですか?」<br />
  92.   「鬼ヶ島へ、鬼退治に行くんだ」<br />
  93.   「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」<br />
  94.   イヌはきび団子をもらい、桃太郎のおともになりました。<br />
  95.   そして、こんどはサルに出会いました。<br />
  96.   「桃太郎さん、どこへ行くのですか?」<br />
  97.   「鬼ヶ島へ、鬼退治に行くんだ」<br />
  98.   「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」<br />
  99.   そしてこんどは、キジに出会いました。<br />
  100.   「桃太郎さん、どこへ行くのですか?」<br />
  101.   「鬼ヶ島へ、鬼退治に行くんだ」<br />
  102.   「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」<br />
  103.   こうして、イヌ、サル、キジの仲間を手に入れた桃太郎は、ついに鬼ヶ島へやってきました。<br />
  104.   </div>
  105. </div>
  106. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  107. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  108. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  109. </div>
  110. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  111. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  112. </div>
  113. </body>
  114. </html>