2012-05-25 16 views
11

tümüyle kesiyorsa, n karakterden sonra bir dizeyi kesen bir JS işlevi yapmaya çalışıyorum - bu işe yarıyor. Sorun şu ki, eğer bir kelimenin ortasında kötü görünüyorsa, bu yüzden ortada olsaydı bütün kelimeyi kestirmek için yardımına ihtiyacım var. Bugüne kadarN karakterden sonra bir dize kesin, ancak bir kelimenin ortasındaki kelime

Kodum:

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

P.S.

  • #desc benim dizeyi içeren div olduğunu.
  • jQuery'yi kullanabilirsiniz.
+0

Ayrıca bkz ilgili duplicat e: ["javascript, sözcükleri kesmeden dizgiyi kısaltır"] (http://stackoverflow.com/q/5454235/331508). –

cevap

17
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)); 
+0

Cool, gerçekten işe yarıyor mu? Ben test etmedim :-) – Bergi

+0

işe yaramıyor :) –

+0

Bir şey eksik olmalı çünkü bu benim için çalışmıyor. Benim tecrübemde sonuçlarda son kelimeyi kaldırırsa. Eğer son kelime 'şu anda' ise ve uzunluk onu 'cur' olarak keserse, 'cur' çıkarır. Bununla birlikte, eğer uzunluk, 'şu anda' tam olarak hiçbir yerde boşluk bırakmadan kesilirse, STILL bu kelimeyi kaldırır. – jkupczak

-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)); 
+0

Yanıtladığınız için teşekkürler, ancak işe yaramazsa, neden döngü boş? –

+0

çünkü sadece doğru değeri hesaplamak içindir. – Gavriel

+0

çalışmaz .. –

1

Sen Cutter.js

Cutter.js bir göz atmak istersin işaretlemeyi kaybetmeden, kelime sayısına göre, onun uzunluğunu sınırlamak için HTML kodu kesilmesi için kullanılan bir kütüphanedir.

+0

Teşekkürler, ama sadece sayıların sayısını istediğim kelimelerin sayısını bilmiyorum. –

2

Bir for loop, charAt bir arada ve kelime sınırlayıcılarını olarak kabul olanlara karşı karakterini test aracı var. Bunun için bir regular expression kullanacağız:

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

Live example |

5

lastIndexOf yöntem source bir dizede geçen boşluk karakteriyle

bulmak ve ikinci bir argüman geçen bir üst sınır ayarlar yapabilirsiniz.

var cutat= string.lastIndexOf(' ',505); 
if(cutat!=-1)string=string.substring(0,cutat)+'...'; 
//else the string is shorter than 505 (or has no spaces...) 
+0

String.lastIndexOf() işlevinin ikinci bağımsız değişkeni, üst sınır değil, aramaya başlamak için kullanılacak dizindir. https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf – Will

+2

Aynı kaynak durumları: Arama dizesi dizin argümanından başlayarak geriye doğru araştırılır. – kennebec

+0

@kennebec haklı! Yön ** geriye doğru ** ve bu nedenle 'lastIndexOf' iş için en uygunudur. Açıklamak gerekirse: 'var longString =" Bu kadar uzun değil ama yine de kesmeye ihtiyaç var "; ' console.log (longString.length, longString.lastIndexOf ('', 15)); ' ' // baskılar 37 13' – aaki

0

Bu basit fonksiyon her durumda işe artı gerekirse 3 nokta ekleyerek olacaktır:

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

Örnek:

var title = "This function will work in any situation"; 
var short = shortenString(title, 30); 
0

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

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

İlgili konular