Wyświetlać tylko 10 znaków z długiego ciągu?


88

Jak uzyskać długi ciąg tekstowy (taki jak querystring), aby wyświetlić maksymalnie 10 znaków, używając JQuery?

Przepraszam, jestem nowicjuszem w JavaScript i JQuery: S
Każda pomoc byłaby bardzo mile widziana.


Czy możesz wyjaśnić na przykładzie?
Andy E

Czy jest to jquery, ponieważ jest to ciąg znaków w elemencie DOM?
sje397

1
@Gopi tak, mam na myśli elipsę Aby wyjaśnić ... Pracuję nad systemem intranetowym, w którym użytkownicy mogą zgłaszać przypadki ... niektórzy użytkownicy dodają bardzo długie zapytania, które niszczą układ tabeli, gdy są wyświetlane na stronie głównej. Chcę przechwycić ten querystring, sprawdzając (za pomocą JQuery) wszystko, co ma 10 znaków plus bez spacji i elipsę (np. This = jest-naprawdę-długi i ciąg ...) Proszę dać mi znać, jeśli to ma sens. Dzięki
Nasir

1
To działało na tutaj Dobrej Sukces!
Tran Anh Hien

przeglądarki mogą automatycznie dodawać wielokropek do ciągów, które łamałyby granice elementu (patrz moja odpowiedź poniżej)
Alnitak

Odpowiedzi:


169

Jeśli dobrze rozumiem, chcesz ograniczyć ciąg do 10 znaków?

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

Coś w tym stylu?


15
Instrukcja if jest tutaj opcjonalna. str.substring (0,10) w ciągu zawierającym mniej niż 10 znaków pozostanie niezmienione :)
Andy E

10
ale instrukcja if może być użyta do czegoś takiego jak: {var str = 'Bardzo długi łańcuch'; if (długość.str.> 10) słowo = podłańcuch (0,10) + "..."; }
Daniel Wedlund,

@Daniel: prawda, konieczne byłoby dodanie wielokropka. Na szczęście użyłem słowa opcjonalne :-)
Andy E

4
@Daniel, "if (str.length> 10) str = str.substring (0,10) +" ... ";}" jest błędne, ponieważ łańcuch wynikowy ma długość 13, a nie 10 !! poprawne: "if (str.length> 10) str = str.substring (0,10-3) +" ... ";}"
Floyd,

1
Oto test wydajności dla tych, którym zależy. Działają prawie tak samo, jeśli przypadek, w którym podciąg jest faktycznie potrzebny, zdarza się w 50% przypadków.
Juan Mendes,

22

A oto przykład jQuery:

Pole tekstowe HTML:

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

Kod jQuery, aby ograniczyć jego rozmiar:

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

Na przykład możesz użyć powyższego kodu jQuery, aby uniemożliwić użytkownikowi wprowadzanie więcej niż 10 znaków podczas pisania; poniższy fragment kodu robi dokładnie to:

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

Aktualizacja : powyższy fragment kodu został użyty tylko do pokazania przykładowego zastosowania.

Poniższy fragment kodu rozwiąże problem z elementem DIV:

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

Zwróć uwagę , że używam textzamiast valw tym przypadku, ponieważ valmetoda wydaje się nie działać z elementem DIV.


Cześć Giu, nie mam do czynienia z tekstem, kiedy jest wprowadzany ... raczej kiedy jest wyświetlany i niszczy mój układ tabeli. Querystring tekst jest wyświetlany w DIV o nazwie .tasks-overflow
Nasir

@Nasir Dzięki za podpowiedź; Zaktualizowałem moją odpowiedź; to powinno pomóc ci rozwiązać twój mały problem
Giuseppe Accaputo,

Cześć Giu, wypróbowałem twój kod i nie zadziałał. Chcę, aby ten długi ciąg „thisisonelooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongquerystring” był wyświetlany jako „thisisonelooo ...”
Nasir

Tak wygląda kod: $ (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);}); // Kod Giu var elem = $ (". jobs-overflow"); if (elem) {if (elem.val (). length> 10) elem.val (elem. val (). substr (0,10))}});
Nasir,

@Nasir Przepraszam; moja stara odpowiedź zawierała valmetodę, która wydaje się nie działać dla elementów DIV. Ponownie zaktualizowałem moją odpowiedź i teraz textmetoda służy do zmiany tekstu, który powinien działać idealnie (ponownie przetestowałem go lokalnie). Czy mógłbyś przetestować go ponownie z moim zaktualizowanym kodem i dać mi znać?
Giuseppe Accaputo,

21

Tworzenie własnej odpowiedzi, ponieważ nikt nie brał pod uwagę, że podział może się nie wydarzyć (krótszy tekst). W takim przypadku nie chcemy dodawać „...” jako sufiksu.

Operator potrójny rozwiąże to:

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

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

Może być zamknięty, aby działał:

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

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

I rozszerz do klasy pomocników, więc możesz nawet wybrać, czy chcesz kropki, czy nie:

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

Zmienna wynikowa zawiera „Jestem zbyt słaba ...”



5

html

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

javascript (w gotowym dokumencie)

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

Jeśli masz wiele słów w tekście i chcesz, aby każdy był ograniczony do maksymalnie 10 znaków, możesz zrobić:

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
.text () jest bardziej odpowiedni niż .html (), gdy mamy do czynienia tylko z tekstem.
Andy E

Cześć sje397, muszę być w stanie zignorować inne słowa przed i po tym ciągu (ten ciąg jest długim querystring i nie ma spacji) dzięki
Nasir

@Nasir - możesz zmienić argumenty na substr ... lub możesz chcieć spojrzeć na wyrażenia regularne.
sje397

4

Skracając ciąg do dziesięciu znaków, powinieneś również dodać rzeczywistą elipsę HTML: &hellip;zamiast trzech kropek.


3

To wygląda bardziej na to, czego prawdopodobnie chcesz.

$(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) + "..."
    });
}});


dajesz mu swój element HTML w pierwszym wierszu, a następnie pobiera cały tekst, zastępuje adresy URL wersjami o długości 10 znaków i zwraca go do Ciebie. Wydaje się to trochę dziwne, mając tylko 3 znaki adresu URL, więc poleciłbym to, jeśli to możliwe.

$(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) + "..."
    });
}});

co spowodowałoby wyrwanie http: // lub https: // i wydrukowanie do 10 znaków www.example.com


2

Chociaż nie ograniczy to ciągu do dokładnie 10 znaków, dlaczego nie pozwolić przeglądarce wykonać pracy za Ciebie za pomocą CSS:

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

a następnie dla komórki tabeli zawierającej ciąg dodaj powyższą klasę i ustaw maksymalną dozwoloną szerokość. Wynik powinien wyglądać lepiej niż cokolwiek zrobionego na podstawie pomiaru długości struny.


1

@ jolly.exe

Niezły przykład Jolly. Zaktualizowałem twoją wersję, która ogranicza długość znaków w przeciwieństwie do liczby słów. Dodałem również ustawienie tytułu do prawdziwego oryginalnego innerHTML, aby użytkownicy mogli najechać kursorem i zobaczyć, co jest obcięte.

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

Spróbuj tego :)

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

-2

Pokaż to „długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst długi tekst "

do

długi tekst długi tekst długi ...

        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;
            }
         };

Rozważasz tutaj słowa. Pytanie dotyczy postaci
Victora Fernandesa
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.