Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript替换未定义错误显示!_Javascript_Html_Replace - Fatal编程技术网

Javascript替换未定义错误显示!

Javascript替换未定义错误显示!,javascript,html,replace,Javascript,Html,Replace,朋友们,我取得了相当大的成功,但在替换时出现了一个未定义的错误: 这是我的新代码: 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 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();
var avidno='(800)123 1234';
var bodytext=document.body.innerHTML;
函数验证(){
var regex=/^\(?([0-9]{3})\)?[-.]([0-9]{3})[-.]?([0-9]{4})$/gi;
if(正则表达式测试(avidno)){
警惕(“宾果”);
var altrstr=''+avidno+'';
//var newaltr=bodytext.replace(avidno,altrstr);
//var str_count=bodytext.match(avidno).length;//4匹配
document.body.innerHTML=newaltr;
警报(avidno.长度);
find_count=avidno.length;

对于(var i=0;i而言,未定义的错误由此行引起:

document.body.innerHTML = newaltr;
var newaltr = bodytext.replace(avidno, altrstr);
newaltr尚未定义,但您正在尝试使用它设置正文的innerHTML。还需要解决其他问题。例如,此行:

document.body.innerHTML = newaltr;
var newaltr = bodytext.replace(avidno, altrstr);
每次通过循环时,都会覆盖newaltr的上一个值。如果您试图追加(我不确定),则正确的语法是:

newaltr += bodytext.replace(avidno, altrstr);
编辑

正如我和其他人在文章中提到的,你的逻辑有几个问题。除了逻辑问题之外,我认为你的方法是错误的。看看下面的问题(实际上,标记为答案的回答),它应该会让你指向正确的方向


在创建变量之前,您正在使用变量
newaltr

代码的另一个问题是,您在循环中进行替换,但是您在一个变量上进行替换,并将结果存储在另一个变量中。您将始终在原始变量上进行替换,因此只使用最后一个替换


您正在使用
avidno
中字符串的长度来确定要进行多少替换,这似乎不符合逻辑。

这可能意味着
bodytext
(因此
document.body.innerHTML
)未定义。请确保在加载文档时运行代码。提供准确的错误消息也不会出错…我根据您的观点更改代码,但现在未定义的错误已结束,但它再次替换一次而不是多次:您可能还希望将
=+
编辑为
+=
(我希望是一个诚实的打字错误)