为警报和确认对话框编写文本时的常见问题:在添加换行符之前要输入的字符数。有些浏览器会在某一时刻自动中断,而另一些则在其他时刻自动中断。所以你只能猜测。有用的片段是一个 Javascript 函数,它将警报或确认对话框的预期文本和字符长度作为输入,然后返回相同的输入字符串,仅在空格最接近传入字符长度的位置添加新行字符。这样,单词不会中途分解。
示例:
1. 将 var 分配给要用于警告或确认对话框的文本字符串,例如:
var a = "My dog has fleas the quick brown fox jumps over the lazy dog etc";
2.通过函数运行文本,例如:
a = breakLines(a); // 默认,每 50 个字符中断一次
或
a = breakLines(a, 20); // 每 20 个字符
换行 在函数运行后显示 'a' 的值,你会看到在你指定的每个位置都添加了换行符,在最接近你指定的字符位置的空格字符处。例如,如果您指定 20,则“a”将转换为以下内容:
'我的狗有跳蚤\n敏捷的棕色狐狸\n跳过懒惰的\n狗等'
对于字符串中的每一行(一行是以换行符结尾的字符串的一部分),该行的两边都被修剪掉空白。下面的代码片段使用 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;
}