2010-03-31 8 views
2

메신저 요소 컨테이너의 크기에 따라 작은 이름 요약 함수를 만들려고합니다. 내가 얻을 수가 무엇javascript summary function

function shorten_text(str, size){ 
    size = size.match(/[0-9]*/); 
    var endValue = Math.floor(Number(size)/10); 
    var number; 
    var newStr; 
    for (number = 0; number <= endValue; number++) { 
     if(str[number].length != 0) { 
      newStr += str[number]; 
     } 
    } 
    return newStr + '...'; 

} 
shorten_text('Phil Jackson', '94px'); 
// output should be 'Phil Jack...' 

내가 잘못 가고 어디 사람이 을 볼 수 있습니다 ... undefinedundef입니까?

편집 :

같은 기능을 위해 인터넷 검색을하는 사람은 아래의 의견에 따라

개정 코드 :

function shorten_text(str, size){ 
    size = parseInt(size); 
    var endValue = Math.floor(size/10); 
    if(str.length > endValue) { 
     return str.substring(0, endValue) + '...'; 
    }else{ 
     return str; 
    } 
} 

스크린 샷 : 당신은 당신의 newStr를 초기화해야

screenshot http://www.freeimagehosting.net/uploads/4639663b52.gif

+0

각 문자의 너비가 1 픽셀이라고 가정합니까? 이게 어떻게 작동합니까? – Nir

+0

표시 할 스크린 샷을 추가했습니다. –

+0

감사합니다. 나는 각 너비가 1 픽셀보다 큰 가변 너비를 가지므로 너비에 대한 각 픽셀에 대해 1 문자를 추가하는 것이 어떻게 작동하는지 알지 못합니다. – Nir

답변

3

변수를 빈 문자열로 채우십시오. 그렇지 않으면 해당 변수에 undefined 값 wh가 포함됩니다. 이후

  • 당신은 Number(size)를 호출 할 필요는 없다 :

    함수에서
    var test; // at this moment the variable contains the undefined value 
    test += 'foo'; 
    // now test contains "undefinedfoo" 
    

    :

    function shorten_text(str, size){ 
        size = size.match(/[0-9]*/); 
        var endValue = Math.floor(Number(size)/10); 
        var number; 
        var newStr = ''; 
        for (number = 0; number <= endValue; number++) { 
         if(str[number].length != 0) { 
          newStr += str[number]; 
         } 
        } 
        return newStr + '...'; 
    } 
    
    shorten_text('Phil Jackson', '94px'); // outputs "Phil Jacks..." 
    

    몇 가지 의견 당신이 연결할 때 무형 문화 유산은 예를 들어, 문자열로 변환됩니다 나누기 연산자는 형식 강제 변환을합니다. 암시 적으로

  • substring 메서드를 사용하면 원래 문자열의 일부를 가져올 수 있습니다. 대괄호 속성 접근을 가진 문자열의
  • 액세스 문자가 일부 구현에서 지원되지 않을 수 있습니다, 당신은 동일한 기능을 수행 할 표준 charAt 방법 (str.charAt(i))

또 다른 방법을 사용할 수 있습니다

function shorten_text(str, size){ 
    var endValue = Math.floor(parseInt(size)/10); 
    return str.substring(0, endValue) + '...'; 
} 

shorten_text('Phil Jackson', '94px'); // outputs "Phil Jack..." as expected 
+0

고맙습니다. 매우 유익합니다. 나는 여기에서 배우기 위해있다! (그리고 매력처럼 작동합니다) –

+0

tuche, 시간과 공간을 절약합니까! –

+0

짧은 shorten_text는 약간 다른 답변 ('Jacks'대신 'Jack')을 출력합니다. 원한다면 "+1"이 필요합니다. 내 자신의 중복 응답을 삭제하겠습니다. –

관련 문제