2010-03-31 38 views
2

即时通讯尝试根据元素容器的大小制作一个小名称摘要函数,这里是我的;javascript摘要函数

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

截屏:

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

+0

你是否假设每个字符都是一个像素宽?这个怎么用? – Nir 2010-03-31 05:29:53

+0

我已添加屏幕截图来显示。 – 2010-03-31 06:05:16

+0

谢谢。我仍然没有得到如何为宽度的每个像素添加1个字符,因为每个字符的可变宽度肯定超过1个像素。 – Nir 2010-03-31 07:43:20

回答

3

需要初始化你newStr用空字符串变量,否则该变量将包含undefined值,wh当您连接ICH将被转换为字符串,如:

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..." 

几点意见:

  • 你并不需要调用Number(size),因为师运营商进行类型强制。含蓄地
  • 您可以使用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

非常感谢,非常丰富。我在这里学习! (和作品像魅力) – 2010-03-31 05:20:11

+0

tuche,确实节省时间和空间! – 2010-03-31 05:24:35

+0

较短的short_text输出一个稍微不同的答案('Jack'而不是'Jacks') - 如果你想要的话需要一个“+1”。我要删除我自己现在多余的答案。 – 2010-03-31 05:25:37