長い文字列を10文字だけ表示しますか?


88

JQueryを使用して、長いテキスト文字列(クエリ文字列など)を取得して最大10文字を表示するにはどうすればよいですか?

申し訳ありませんが、私はJavaScriptとJQueryの初心者です:S
どんな助けでも大歓迎です。


例を挙げて明確にできますか?
Andy E

DOM要素の文字列であるためjqueryですか?
sje397 2010

1
@Gopiはい私はellipsizeを意味します明確にするために...私はユーザーがケースを提起できるイントラネットシステムに取り組んでいます...一部のユーザーはホームページに表示されたときにテーブルレイアウトを壊す超長いクエリ文字列を追加します。このクエリ文字列を(JQueryを使用して)10文字以上スペースなしでチェックし、楕円サイズにすることでインターセプトしたいと思います(例:this = is-a-really-long&string ...)これが理にかなっている場合はお知らせください。ありがとう
Nasir 2010

1
それはで働いていた、ここで良い成功事例の!
Tran Anh Hien 2017

ブラウザは、要素の境界を壊す文字列に省略記号を自動的に追加できます(以下の私の回答を参照)
Alnitak 2018

回答:


169

私が正しく理解していれば、文字列を10文字に制限したいですか?

var str = 'Some very long string';
if(str.length > 10) str = str.substring(0,10);

そんな感じ?


15
ここでは、ifステートメントはオプションです。 10文字未満の文字列のstr.substring(0,10)は、影響を受けません:)
Andy E

10
ただし、ifステートメントは次のように使用できます。{var str = '非常に長い文字列'; if(str.length> 10)str = str.substring(0,10)+ "..."; }
Daniel Wedlund 2010

@Daniel:確かに、省略記号を追加するために必要です。幸いなことに、私はオプションという言葉を使用しました:-)
Andy E

4
@Daniel、 "if(str.length> 10)str = str.substring(0,10)+" ... ";}"は、結果文字列の長さが10ではなく13であるため、間違っています。正解: "if(str.length> 10)str = str.substring(0,10-3)+" ... ";}"
フロイド

1
これが気になる人のためのパフォーマンステストです。部分文字列が実際に必要な場合が50%の確率で発生する場合、これらはほぼ同じように機能します。
Juan Mendes

22

そして、これがjQueryの例です。

HTMLテキストフィールド:

<input type="text" id="myTextfield" />

サイズを制限するjQueryコード:

var elem = $("#myTextfield");
if(elem) elem.val(elem.val().substr(0,10));

例として、上記のjQueryコードを使用して、ユーザーが入力中に10文字を超える文字を入力できないように制限できます。次のコードスニペットはまさにこれを行います。

$(document).ready(function() {
    var elem = $("#myTextfield");
    if (elem) {
        elem.keydown(function() {
            if (elem.val().length > 10)
                elem.val(elem.val().substr(0, 10));
        });
    }            
});

更新:上記のコードスニペットは、使用例を示すためにのみ使用されました。

次のコードスニペットは、DIV要素の問題を処理します。

$(document).ready(function() {
    var elem = $(".tasks-overflow");
    if(elem){
        if (elem.text().length > 10)
                elem.text(elem.text().substr(0,10))
    }
});

このメソッドはDIV要素では機能しないようであるため、この場合のtext代わりにを使用していることに注意しくださいvalval


こんにちはGiu、入力中のテキストを扱っていません...むしろ、テキストが表示されてテーブルのレイアウトが壊れたときです。クエリ文字列のテキストは、.tasks-overflowと呼ばれるDIVに表示されます
Nasir

@Nasirヒントをありがとう。回答を更新しました。それはあなたがあなたの小さな問題を解決するのに役立つはずです
ジュゼッペアカプト2010

こんにちはGiu、私はあなたのコードを試しましたが、うまくいきませんでした。この長い文字列「thisisonelooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongquerystring」を「thisisonelooo ...」として表示したい
Nasir

コードは次のようになります。$(document).ready(function(){$( "。tasks-overflow:contains( 'http://')")。each(function(){var self = $(this )、txt = self.text(); txt = txt.replace(/(http [s] *:[\ / \] {2})[^ \ s] * / g、 '$ 1 ...'); self.text(txt);}); // Giuコードvarelem = $( "。tasks-overflow"); if(elem){if(elem.val()。length> 10)elem.val(elem。 val()。substr(0,10))}});
Nasir 2010

@Nasirごめんなさい。私の古い答えにはvalメソッドが含まれていましたが、これはDIV要素では機能しないようです。回答を再度更新しました。このtextメソッドを使用してテキストを変更しました。これは完全に機能するはずです(ローカルで再度テストしました)。更新したコードでもう一度テストして、教えていただけますか?
ジュゼッペアカプト2010

21

分割が発生しなかった可能性があると誰も考えていないため、独自の回答を作成します(短いテキスト)。その場合、接尾辞として「...」を追加したくありません。

三項演算子はそれを整理します:

var text = "blahalhahkanhklanlkanhlanlanhak";
var count = 35;

var result = text.slice(0, count) + (text.length > count ? "..." : "");

機能するように閉じることができます:

function fn(text, count){
    return text.slice(0, count) + (text.length > count ? "..." : "");
}

console.log(fn("aognaglkanglnagln", 10));

ヘルパークラスに展開して、ドットが必要かどうかを選択することもできます。

function fn(text, count, insertDots){
    return text.slice(0, count) + (((text.length > count) && insertDots) ? "..." : "");
}

console.log(fn("aognaglkanglnagln", 10, true));
console.log(fn("aognaglkanglnagln", 10, false));

19
var example = "I am too long string";
var result;

// Slice is JS function
result = example.slice(0, 10)+'...'; //if you need dots after the string you can add

結果変数に「Iamtool ...」が含まれています



5

html

<p id='longText'>Some very very very very very very very very very very very long string</p>

javascript(ドキュメント対応)

var longText = $('#longText');
longText.text(longText.text().substr(0, 10));

テキストに複数の単語があり、それぞれを最大10文字に制限したい場合は、次のようにすることができます。

var longText = $('#longText');
var text = longText.text();
var regex = /\w{11}\w*/, match;
while(match = regex.exec(text)) {
    text = text.replace(match[0], match[0].substr(0, 10));
}
longText.text(text);

2
テキストのみを扱う場合は、.html()よりも.text()の方が適切です。
Andy E

こんにちはsje397、この文字列の前後の他の単語を無視できるようにする必要があります(この文字列は長いクエリ文字列であり、スペースはありません)ありがとう
Nasir 2010

@ Nasir-引数をsubstr ...に変更できます。または、正規表現を確認することもできます。
sje397 2010

4

文字列を10文字に切り捨てるときにも行う必要があるの&hellip;は、3つのピリオドではなく、実際のhtml省略記号エンティティを追加することです。


3

これはあなたがおそらく望むもののように私にはもっと見えます。

$(document).ready(function(){
var stringWithShorterURLs = getReplacementString($(".tasks-overflow").text());

function getReplacementString(str){
    return str.replace(/(https?\:\/\/[^\s]*)/gi,function(match){
        return match.substring(0,10) + "..."
    });
}});


最初の行にhtml要素を指定すると、テキスト全体が取得され、URLが10文字の長さのバージョンに置き換えられて返されます。これは、URL文字が3つしかないので少し奇妙に思えるので、可能であればこれをお勧めします。

$(document).ready(function(){
var stringWithShorterURLs = getReplacementString($(".tasks-overflow p").text());

function getReplacementString(str){
    return str.replace(/https?\:\/\/([^\s]*)/gi,function(match){
        return match.substring(0,10) + "..."
    });
}});

これはhttp://またはhttps://を取り除いて、www.example.comの最大10文字を印刷します。


2

これは文字列を正確に10文字に制限するものではありませんが、CSSを使用してブラウザに作業を任せてみませんか。

.no-overflow {
    white-space: no-wrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

次に、文字列を含むテーブルセルに上記のクラスを追加し、最大許容幅を設定します。結果は、文字列の長さの測定に基づいて行われた何よりも見栄えが良くなるはずです。


1

@ jolly.exe

良い例ジョリー。単語数ではなく文字長を制限するバージョンを更新しました。また、タイトルを実際の元のinnerHTMLに設定して、ユーザーがホバーして何が切り捨てられているかを確認できるようにしました。

HTML

<div id="stuff">a reallly really really long titleasdfasdfasdfasdfasdfasdfasdfadsf</div> 

JS

 function cutString(id){    
     var text = document.getElementById(id).innerHTML;         
     var charsToCutTo = 30;
        if(text.length>charsToCutTo){
            var strShort = "";
            for(i = 0; i < charsToCutTo; i++){
                strShort += text[i];
            }
            document.getElementById(id).title = "text";
            document.getElementById(id).innerHTML = strShort + "...";
        }            
     };

cutString('stuff'); 

1

これを試して :)

var mystring = "How do I get a long text string";
mystring = mystring.substring(0,10);
alert(mystring);

-2

これを表示する「長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキストテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキストロングテキスト "

長いテキスト長いテキスト長い..。

        function cutString(text){    
            var wordsToCut = 5;
            var wordsArray = text.split(" ");
            if(wordsArray.length>wordsToCut){
                var strShort = "";
                for(i = 0; i < wordsToCut; i++){
                    strShort += wordsArray[i] + " ";
                }   
                return strShort+"...";
            }else{
                return text;
            }
         };

あなたはここで言葉を考えています。質問はキャラクターに言及しています
ビクターフェルナンデス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.