2011-02-10 1 views
4

ID가 "shortblogpost"인 div가 있습니다. 나는 27 번째 단어까지 세어보고 끝에 "..."을 추가하고 싶습니다.자바 스크립트 단어 수가 잘리지 않습니다.

다음 코드를 시도했습니다. 문제, 그것의 계산서 및 낱말 아닙니다. JavaScript를 사용하지 않고 jQuery를 사용한다고 생각합니까?

내가 어떤 도움 만

<script type="text/javascript"> 
var limit  = 100, 
    text   = $('div.shortblogpost').text().split(/\s+/), 
    word, 
    letter_count = 0, 
    trunc  = '', 
    i   = 0; 

while (i < text.length && letter_count < limit) { 
    word   = text[i++]; 
    trunc  += word+' '; 
    letter_count = trunc.length-1; 

} 

trunc = $.trim(trunc)+'...'; 
console.log(trunc); 
</script> 

타이 모든 사전에 다양한 서버의 이유로 자바 스크립트를 사용해야합니다.

답변

7

자르기 기능.

사용 : truncate ('이것은이 기능의 테스트입니다', 2); 반환 값 : 이것은 ...

사용 : truncate ('이것은이 함수의 테스트입니다', 5, '+++'); 반환 값 :이 +++

의 테스트입니다
function truncate (text, limit, append) { 
    if (typeof text !== 'string') 
     return ''; 
    if (typeof append == 'undefined') 
     append = '...'; 
    var parts = text.split(' '); 
    if (parts.length > limit) { 
     // loop backward through the string 
     for (var i = parts.length - 1; i > -1; --i) { 
      // if i is over limit, drop this word from the array 
      if (i+1 > limit) { 
       parts.length = i; 
      } 
     } 
     // add the truncate append text 
     parts.push(append); 
    } 
    // join the array back into a string 
    return parts.join(' '); 
} 

편집 : 영업 이익의 매개 변수에 의해 구현 신속하고 더러운 :

<script type="text/javascript"> 
// put truncate function here... 

var ele = document.getElementById('shortblogpost'); 
ele.innerHTML = truncate(ele.innerHTML, 20); 
</script> 
+0

다시 한번 ... 당신의 답을 구체화하려하지만 많은 행운이없는 것 ... 나는 JS에 대해 거의 모른다고 말할 수 있습니다. (반은 사실 :) –

+0

좋아, 빠르고 더러운 구현을 추가했습니다.비록 당신이 자바 스크립트와 HTML이 함께 작동하는 방법을 더 잘 이해하려고 노력해야한다는 경고를 덧붙이 겠지만, 무심코 파고 들기는 재앙을위한 방법입니다. –

+0

CONGRAZ! 귀하의 코드가 작동했습니다! :) –

1

루프가 한 단어 씩 단어를 추가하는 동안 (문자 수가 & &이면 문자 수가 제한보다 작음). 당신이해야 할 유일한 일은 "& & 단어 수가 제한보다 낮습니다"로 두 번째 조건을 바꾸는 것입니다. JS이 의사 사소한되어야 변환

...

+0

글쎄, 당신의 대답은 간단한데 ...하지만 난 시작 코드를 주어졌다. 나는 나 자신의 인스턴트 메신저로 더 많은 JS를 배우려고 노력하지만, 나는 당신이 스스로 내 대답을 구현할 수있는 시점에 있지 않다. –

+0

@webmaster alex l : 글쎄, 나는 현재 trunc에있는 단어의 수를 보유하고있는 것 같다. 그리고 제한이있다. 당신이 더 큰지 알아 내려고 노력하고있다. 다른 것보다 ... – Piskvor

0

이 작동합니다 :

var words = $('div.shortblogpost').text().replace(/\s/g, ' ').split(' '); 
var result = ""; 
for(var w = 0 ; w < 27 ; w++) { 
    if(words[w].length > 0) { 
     result += words[w] + ' '; 
    } 
} 
result = result.trim() + "..."; 
4

이 될 수 있습니다 한 줄의 코드로 이루어집니다.

myString.replace(/(([^\s]+\s+){27}).+/, "$1..."); 

또는, 당신은 그것에게 기능을 만들 수 있습니다

그래서
function truncateString(s, wordCount) 
{ 
    var expr = new RegExp("(([^\\s]+\\s+){" + wordCount + "}).+"); 
    return s.replace(expr, "$1..."); 
} 

, 당신의 코드에 대한이 작업을하기를, 당신은 할 수 있습니다 :이 방법에 대해

var post = $('div.shortblogpost').text(); // get the text 
post = postText.replace(/(([^\s]+\s+){27}).+/, "$1..."); // truncate the text 
$('div.shortblogpost').text(post); // update the post with the truncated text 
+0

내가 틀린 일을해야합니다. shortblogpost.replace (/ ((^ \ s) + \ s +) {24}).// "$ 1 .. . "); 짧은 달콤한 대답 인 것 같아서 고마워. –

+0

나는 당신의 족집게를 좋아한다. 나는 많은 주저와 테스트없이 정확한 정규식을 찾을 수 없다. –

+0

@webmaster alex -보다 구체적인 코드를 제공하기 위해 내 대답을 업데이트했습니다. 희망이 도움이됩니다. – gilly3

1

를? jsfiddle

HTML :

<div id='shortblogpost'>test test test test test test test test test test test</div> 

자바 스크립트 :

alert(document.getElementById('shortblogpost').innerHTML); 
var numWordToDisplay = 3; //how many words u want to display in your case 27 
var newArray = document.getElementById('shortblogpost').innerHTML.split(' '); 
if(newArray.length >= numWordToDisplay) 
    newArray.length = numWordToDisplay; 
console.log(newArray.join(' ') + '...'); //test test test... 
+0

롤, 편집을위한 타이, 지금 당신의 대답을 테스트 해 본 적이있다. 그리고 당신의 이전 게시물은 작동하지 않는다 :/... 새로운 편집을 시도한다 –

+0

는 div # shortblogpost ? – kjy112

+0

나에게 호의를 베풀 수는 없지만, 아직 작동하지 않지만 getElementByID에 경고 팝업을 추가하여 내 shortblogpost를 찾을 수 있는지 확인하십시오. Im은 문제가 아니라 내 마지막에 귀하의 코드와 함께하지만, 확인하고 싶습니다. –