我创建了一个可扩展的textarea。计算内容的字符数,并计算和修改文本区的行号。这非常有效。但是,当用户手动命中输入(单个字符)时,不会添加任何行。
我想更改它,以便用户可以通过在新段落之前添加@@来创建自己的段落。这将保存到数据库中。当我从数据库输出时,我会用<br /><br />
替换@@。
这是我用来计算行数的函数:
function getRowCount(NumCharacters) {
var NewRows = NumCharacters / 40;
NewRows = parseInt(NewRows) + 1;
return NewRows;
}
每行有40个字符。每次用户点击另外40个字符时,都会添加另一行。
在我的JavaScript中,当用户点击@@时,我需要在行数上添加一行。
如何使用JavaScript搜索并计算找到@@序列的次数?并每次添加一行?
++++++++++++++++++++++++++++++++++++++++++
我已经尝试了下面的一些答案。其中两个工作得很好,可读性和简单性。但是,两者都会产生一个我无法解决的错误。 Firebug告诉我:
ThisText.match(/@@/g) is null
是的,我知道它是空的。找不到@@。
这会引发错误:
var MyString = "Would you like to help me today?";
ExtraRows = MyString.match(/@@/g).length + 1;
这不会引发错误:
var MyString = "Would you like to @@help me today?";
ExtraRows = MyString.match(/@@/g).length + 1;
那么,如何在没有找到@@的情况下摆脱似乎发生的错误?
答案 0 :(得分:3)
var str = "This is paragraph one@@and paragraph two@@and another";
var pcount = str.match(/@@/g).length;
答案 1 :(得分:2)
有多种方法可以做到:
// Simplest, suggested
var lines = (str.match(/@@/g) || []).length + 1;
// One silly variation
var lines = 1;
str.replace(/@@/g,function(){ lines++ })
// Another silly variation
for (var lines=1,r=/@@/g;r.exec(str);lines++){}
// aka...
var lines=1,r=/@@/g;
while(r.exec(str)){ lines++ }
顺便说一下,对于你的初始功能,我会把它简单地写成:
function getRowCount(charCount) {
return Math.ceil(charCount/40);
}
修改:当str
根本不包含@@
时,我已用一种简单的内联方式更新了我的初始答案。