【问题标题】:Javascript replace undefined error shows!Javascript替换未定义错误显示!
【发布时间】:2015-05-22 22:03:41
【问题描述】:

朋友们,我取得了相当大的成功,但在替换时出现了一个未定义的错误:

这是我的新代码:

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();

【问题讨论】:

  • 这可能意味着bodytext(因此document.body.innerHTML)未定义。确保在加载文档时运行代码。提供准确的错误信息也不会错...

标签: javascript html replace


【解决方案1】:

您在创建变量newaltr 之前使用它。

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

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

【讨论】:

    【解决方案2】:

    未定义的错误是由这一行引起的:

    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...

    【讨论】:

    • 我根据您的观点更改了我的代码,但现在未定义的错误已经结束,但它再次替换一次而不是多次:
    • 您可能还想将=+ 编辑为+=(我希望这是一个诚实的错字)
    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2016-06-04
    相关资源
    最近更新 更多