我试图根据元素容器的大小制作一个小名称汇总函数,这就是我所拥有的;
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 :(得分:3)
您需要使用空字符串初始化newStr
变量,否则该变量将包含undefined
值,在连接时将转换为字符串,例如:
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