如何修复“Uncaught TypeError:无法读取属性'替换'未定义”错误?

时间:2017-11-01 12:58:47

标签: javascript jquery

我在这里阅读了其他几个问题,他们似乎没有答案,不确定这种错误是否会在个案的基础上发生。

我对Javascript的魔法并不太熟悉,我的文字是“9.99美元/月”,我试图在跨度中分开它。这就是我所拥有的:

    var str = jQuery(".mm-checkoutSection2 ul li .mm-data").html();
    var month = /(\/\month)/;
    var year = /(\/\year)/;
    var dollar = /\$/g;
    var currency = /(USD)/;

    str = str.replace(dollar, '<span class="mm-data-sign"><i class="fa fa-dollar"></i></span>');
    str = str.replace(currency, '<span class="mm-data-currency">(USD)</span>');
    str = str.replace(month, '<span class="mm-data-plan">/Monthly</span>');
    str = str.replace(year, '<span class="mm-data-plan">/Yearly</span>');
    jQuery(".mm-checkoutSection2 ul li .mm-data").html(str);

所以,这实际上在前端工作。我根据需要得到了所有的跨度和类,但出于某种原因,当我查看控制台时,我得到一个“未捕获的TypeError:无法读取属性'替换'未定义”,这导致我的页面上出现了一些其他Javascript元素打破。我不知道如何调试/解决这个问题。

3 个答案:

答案 0 :(得分:0)

快速测试显示代码不是您的问题,很可能您在HTML内容中executing this code before the DOM has finished loading,因此您要查找的元素(".mm-checkoutSection2 ul li .mm-data")尚不存在,因此你的str变量是未定义的。

&#13;
&#13;
 var str = "$9.99 USD/month";
 var month = /(\/\month)/;
 var year = /(\/\year)/;
 var dollar = /\$/g;
 var currency = /(USD)/;

    str = str.replace(dollar, '<span class="mm-data-sign"><i class="fa fa-dollar"></i></span>');
    str = str.replace(currency, '<span class="mm-data-currency">(USD)</span>');
    str = str.replace(month, '<span class="mm-data-plan">/Monthly</span>');
    str = str.replace(year, '<span class="mm-data-plan">/Yearly</span>');
    console.log(str);
&#13;
&#13;
&#13;

编辑 - 元素仅出现在一个页面上

要处理不通用的元素,您需要在执行周围包裹conditional

if (jQuery(".mm-checkoutSection2 ul li .mm-data").length) {
  let str = jQuery(".mm-checkoutSection2 ul li .mm-data").html()
    .replace(/\$/g, '<span class="mm-data-sign"><i class="fa fa-dollar"></i></span>')
    .replace(/(USD)/, '<span class="mm-data-currency">(USD)</span>')
    .replace(/(\/\month)/, '<span class="mm-data-plan">/Monthly</span>')
    .replace(/(\/\year)/, '<span class="mm-data-plan">/Yearly</span>');
}

答案 1 :(得分:0)

你能提供更多细节吗? 该消息显示该行是否导致此问题? 第一次替换呼叫时var str是否未定义?

如果你试试这个

var str = jQuery(".mm-checkoutSection2 ul li .mm-data").html() || '';

可以解决您的问题吗?

答案 2 :(得分:-1)

似乎&#34; str&#34;当您尝试替换它的内容时,尚未定义。你有一个元素&#34; .mm-checkoutSection2 ul li .mm-data&#34;在调用js的HTML端?