Javascript 替换显示未定义错误!
2011-06-20
6306
朋友们,我取得了相当大的成功,但在替换时出现了未定义的错误:
这是我的新代码:
var avidno = '(800)123 1234';
var bodytext = document.body.innerHTML;
function validate () {
var regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/gi;
if (regex.test(avidno)) {
alert('bingo');
var altrstr = '<span>'+avidno+'</span>';
//var newaltr = bodytext.replace(avidno, altrstr);
//var str_count = bodytext.match(avidno).length; //4 matched
document.body.innerHTML = newaltr;
alert(avidno.length);
find_count = avidno.length;
for(var i=0;i<find_count;i++)
{
var newaltr = bodytext.replace(avidno, altrstr);
}
// Valid international phone number
} else {
alert('uupss');
// Invalid international phone number
}
}
validate();
2个回答
您在创建变量
newaltr
之前就使用了它。
代码的另一个问题是,您在循环中进行替换,但您在一个变量上执行替换并将结果存储在另一个变量中。您将始终在原始变量上进行替换,因此仅使用最后一次替换。
您在
avidno
中使用字符串的长度来确定要进行多少次替换,这似乎不合逻辑。
Guffa
2011-06-20
未定义错误是由以下行引起的:
document.body.innerHTML = newaltr;
newaltr 尚未定义,但您正尝试使用它来设置正文的 innerHTML。还有其他问题也需要解决。例如以下行:
var newaltr = bodytext.replace(avidno, altrstr);
每次循环时,您都会覆盖 newaltr 的先前值。如果您尝试附加(我不确定),则正确的语法是:
newaltr += bodytext.replace(avidno, altrstr);
编辑
正如我和其他帖子中提到的,您的逻辑存在几个问题。除了逻辑问题之外,我认为您的方法不正确。看看下面的问题(实际上,是标记为答案的回复),它应该会为你指明正确的方向。
https://stackoverflow.com/questions/1444409/in-javascript-how-can-i-replace-text-in...
James Hill
2011-06-20