208

ストレート JavaScript を使用して、動的にロードされた文字列を切り捨てたいと思います。これは URL なので、スペースはありません。もちろん単語の境界は気にしません。文字だけです。

これが私が得たものです:

var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
4

13 に答える 13

394

部分文字列メソッドを使用します。

var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"

だからあなたの場合:

var length = 3;  // set to the number of characters you want to keep
var pathname = document.referrer;
var trimmedPathname = pathname.substring(0, Math.min(length,pathname.length));

document.getElementById("foo").innerHTML =
     "<a href='" + pathname +"'>" + trimmedPathname + "</a>"
于 2009-08-19T17:45:54.083 に答える
18

はい、部分文字列です。Math.min を実行する必要はありません。文字列の長さよりも長いインデックスを持つ部分文字列は、元の長さで終了します。

しかし!

document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

これは間違いです。document.referrer にアポストロフィが含まれていたら? または、HTML で特別な意味を持つその他のさまざまな文字。最悪の場合、リファラーの攻撃者コードが JavaScript をページに挿入する可能性があります。これは XSS セキュリティ ホールです。

これを防ぐためにパス名の文字を手動でエスケープすることは可能ですが、少し面倒です。innerHTML 文字列をいじるよりも、DOM メソッドを使用した方がよいでしょう。

if (document.referrer) {
    var trimmed= document.referrer.substring(0, 64);
    var link= document.createElement('a');
    link.href= document.referrer;
    link.appendChild(document.createTextNode(trimmed));
    document.getElementById('foo').appendChild(link);
}
于 2009-08-19T18:28:53.747 に答える
13

次のコードは文字列を切り捨て、単語を分割せず、代わりに切り捨てが発生した単語を破棄します。完全に Sugar.js ソースに基づいています。

function truncateOnWord(str, limit) {
        var trimmable = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF';
        var reg = new RegExp('(?=[' + trimmable + '])');
        var words = str.split(reg);
        var count = 0;
        return words.filter(function(word) {
            count += word.length;
            return count <= limit;
        }).join('');
    }
于 2015-10-27T22:40:47.977 に答える
10

私はSugar.jsに言及すると思いました。かなりスマートな truncate メソッドがあります。

ドキュメントから:

文字列を切り捨てます。split が true でない限り、truncate は単語を分割せず、代わりに切り捨てが発生した単語を破棄します。

例:

'just sittin on the dock of the bay'.truncate(20)

出力:

just sitting on...
于 2012-03-28T21:07:40.277 に答える
3

はい、substringうまくいきます:

stringTruncate('Hello world', 5); //output "Hello..."
stringTruncate('Hello world', 20);//output "Hello world"

var stringTruncate = function(str, length){
  var dots = str.length > length ? '...' : '';
  return str.substring(0, length)+dots;
};
于 2018-09-27T11:41:03.733 に答える
1
var str = "Anything you type in.";
str.substring(0, 5) + "..." //you can type any amount of length you want
于 2021-01-25T19:57:57.543 に答える
1

単語ごとに切り捨てたい場合。

function limit(str, limit, end) {

      limit = (limit)? limit : 100;
      end = (end)? end : '...';
      str = str.split(' ');
      
      if (str.length > limit) {
        var cutTolimit = str.slice(0, limit);
        return cutTolimit.join(' ') + ' ' + end;
      }

      return str.join(' ');
    }

    var limit = limit('ILorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus metus magna, maximus a dictum et, hendrerit ac ligula. Vestibulum massa sapien, venenatis et massa vel, commodo elementum turpis. Nullam cursus, enim in semper luctus, odio turpis dictum lectus', 20);

    console.log(limit);

于 2019-06-26T07:34:15.187 に答える
0

内部 JavaScript メソッドの助けを借りて、このメソッドを修正できます。

const truncate = (text, len) => {
  if (text.length > len && text.length > 0) {
    return `${text.split(" ").slice(0, len).join(" ")} ...`;
  } else {
    return text;
  }
};

于 2022-03-04T13:19:10.383 に答える