14

n 文字の後に文字列を切り取る JS 関数を作成しようとしています。これは機能します。問題は、単語の途中にあると見栄えが悪いことです。そのため、単語の途中にある場合は単語全体をカットするように助けてください。

これまでの私のコード:

if($('#desc').text().length > 505){
  str = $("#desc").text();
  $('#desc').text(str.substring(0, 505)).append('...');
}

PS

  • #desc は、文字列を含む div です。
  • jQueryを使用できます。
4

7 に答える 7

19
function cut(n) {
    return function textCutter(i, text) {
        var short = text.substr(0, n);
        if (/^\S/.test(text.substr(n)))
            return short.replace(/\s+\S*$/, "");
        return short;
    };
}
$('#desc').text(cut(505));
于 2012-05-25T09:02:26.777 に答える
7

lastIndexOfメソッドは、文字列の最後のスペース文字を見つけることができます。

2番目の引数を渡すと、上限が設定されます。

var cutat= string.lastIndexOf(' ',505);
if(cutat!=-1)string=string.substring(0,cutat)+'...';
//else the string is shorter than 505 (or has no spaces...)
于 2012-05-25T13:45:03.707 に答える
2

これは、forloopcharAt、および単語区切り文字と見なされる文字に対して文字をテストする手段の組み合わせです。そのために正規表現を使用します。

function splitString(str, index) {
  var delim = /\s|[,\.]/; // Put any other character you consider
                          // a non-word char in the brackets.
                          // The initial \s is any whitespace, so
                          // space, tab, newline, etc.
  var ch;
  var i;

  // Loop until we find a matching delimiter or we run out of string    
  for (i = index;
       i >= 0 && !delim.test(str.charAt(i));
       --i) {
    // No body
  }
  if (i < 0) {
    // No break before, split word in middle
    return index;
  }
  return i + 1;
}

実例| ソース

于 2012-05-25T09:01:07.573 に答える
1

Cutter.jsをご覧ください。

Cutter.js は、HTML コードを切り捨てて、マークアップを失うことなく単語数で長さを制限するために使用されるライブラリです。

于 2012-05-25T08:42:12.637 に答える
0

		
    var texte = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu magna at justo bibendum accumsan. Aliquam quam metus, hendrerit eget commodo at, sagittis eu lectus. Nunc quis purus urna. Etiam sollicitudin aliquam dui, vel rutrum ligula tincidunt id. In elementum ultricies ex ut bibendum. Proin ac purus id lorem pharetra commodo. Curabitur euismod commodo eleifend. Proin porttitor aliquet massa eu dapibus. Phasellus vitae tempor nibh. Donec venenatis ligula dui, at eleifend urna facilisis sed. Proin sollicitudin vehicula mi aliquam interdum. Quisque in erat purus. Ut ut ipsum nec odio mollis maximus. Vivamus nec ultricies mi, ut posuere augue.`;
    
    function cut(n,text) {
        if(n<text.length){
          while(text[n] != " " && n>0){
            n--;
          }
          return text.substr(0,n);
        }else{
          return text;
        }

		}
    
    document.getElementById("result").innerHTML = cut(5,texte);
<p id="result"></p>

于 2017-09-28T14:23:43.820 に答える
0

この単純な関数は、必要に応じて 3 つのドットを追加するだけでなく、どのような状況でも機能します。

function shortenString(source_string, max_length) {
    var short = source_string.substr(0, max_length);
    if (/^\S/.test(source_string.substr(max_length)))
        return short.replace(/\s+\S*$/, "") + '...';
    return short;
};

例:

var title = "This function will work in any situation";
var short = shortenString(title, 30);
于 2017-09-15T22:41:56.453 に答える
-1
function cutAt(text, n) {
    if(text.length > n){
        for (; " .,".indexOf(text[n]) !== 0; n--){
        }
        return text.substr(0, n) + '...';
    }
    return text;
}
$('#desc').text(cutAt($('#desc').text(), 505));
于 2012-05-25T08:38:49.207 に答える