【发布时间】:2012-09-07 17:06:50
【问题描述】:
为警告和确认对话框编写文本时的常见问题:在添加换行符之前要输入的字符数。有些浏览器会在某一时刻自动中断,而另一些则在其他时刻自动中断。所以你只能猜测。有用的 sn-p 是一个 Javascript 函数,它将警报或确认对话框的预期文本和字符长度作为输入,然后返回相同的输入字符串,仅在空格最接近传入字符长度的位置添加新行字符。方式,单词不会中途分解。
示例:
1. 将 var 分配给要用于警报或确认对话框的文本字符串,例如:
var a = "我的狗有跳蚤,快速棕色狐狸跳过懒狗等";
2.通过函数运行文本,例如:
a = 断线(a); // 默认,每 50 个字符中断一次
或
a = breakLines(a, 20); // 每 20 个字符中断一次
在通过函数运行它后显示'a'的值,你会看到在你指定的每个地方都添加了换行符,在最靠近你指定的字符位置的空格字符处。例如,如果您指定 20,则“a”将转换为以下内容:
'我的狗有跳蚤\n敏捷的棕色狐狸\n跳过懒惰的\n狗等等'
对于字符串中的每一行(一行是字符串中以换行符结尾的部分),该行的两边都被修剪掉空白。下面的代码 sn-p 使用 jQuery $.trim() 函数来执行此操作,但还有其他方法可以在不使用 jQuery 库的情况下执行此操作,例如使用正则表达式。只需根据您的需要修改代码以使用替代方法。
这引出了我的问题:除了按照如下所示的方式做我想做的事情之外,是否有一种更简单、更紧凑的方法,例如可以利用正则表达式的方法?有接盘侠吗?
function breakLines(text, linelength)
{
var linebreak = '\n';
var counter = 0;
var line = '';
var returntext = '';
var bMatchFound = false;
var linelen = 50; // 50 characters per line is default
if(linelength)
{
linelen = linelength;
}
if(!text){ return '';}
if(text.length < linelen+1) { return $.trim(text);}
while(counter < text.length)
{
line = text.substr(counter,linelen);
bMatchFound = false;
if (line.length == linelen)
{
for(var i=line.length;i > -1;i--)
{
if(line.substr(i,1)==' ')
{
counter += line.substr(0,i).length;
line = $.trim(line.substr(0,i)) + linebreak;
returntext += line;
bMatchFound = true;
break;
}
}
if(!bMatchFound)
{
counter+=line.length;
line = $.trim(line) + linebreak;
returntext += line;
}
}
else
{
returntext += $.trim(line);
break; // We're breaking out of the the while(), not the for()
}
}
return returntext;
}
【问题讨论】:
标签: javascript string replace split