字符串上的JS str.replace“不是函数”错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串上的JS str.replace“不是函数”错误相关的知识,希望对你有一定的参考价值。
str.replace()引发此错误:“ TypeError:self.options.strings.map不是函数。”
我知道它也应该是一个字符串,参数也应该是(或正则表达式)。检出的类型正确:字符串。
该字符串未在代码中声明,我从元素的html中提取了该字符串,正确地返回了一个字符串。我尝试使用香草js方式而不是JQ来获取内部html,没有任何变化。该元素还包含嵌套元素,但这应该没问题,因为它们也是字符串化的。
我尝试用任意字符串替换正则表达式,同样的错误。我附加了toString(),并包装了String(obj),什么也没有。
最奇怪的是,在浏览器控制台中运行代码段确实有效。
我在这个论坛上寻找了类似的问题,但都属于上述问题之一。
// Pull the string from an element.
let str = $("#strHolder").html();
// Make sure it's a string.
if (typeof str !== "string" || str === undefined)
console.error("Not a string or undefined.");
console.log(typeof str); // Returns "string".
// Append some code after each break tag.
// TypeError: self.options.strings.map is not a function
str = str.replace(/<br>/g, "<br>^400");
console.log(str);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="strHolder">
Lorum ipsum <br> dolor sit amet <br>
<div id="nestedStuff">
consectetur adipiscing elit
</div>
</div>
答案
一个可能的原因可能是您的代码在DOM完全加载之前正在执行。在这种情况下,您可以将代码放在body标记的底部,也可以用DOMContentLoaded event
包装代码<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- HTML -->
<script>
document.addEventListener('DOMContentLoaded', (event) =>
// Pull the string from an element.
let str = $("#strHolder").html();
// Make sure it's a string.
if (typeof str !== "string" || str === undefined)
console.error("Not a string or undefined.");
console.log(typeof str); // Returns "string".
// Append some code after each break tag.
// TypeError: self.options.strings.map is not a function
str = str.replace(/<br>/g, "<br>^400");
console.log(str);
);
</script>
<div id="strHolder">
Lorum ipsum <br>
dolor sit amet <br>
<div id="nestedStuff">
consectetur adipiscing elit
</div>
</div>
以上是关于字符串上的JS str.replace“不是函数”错误的主要内容,如果未能解决你的问题,请参考以下文章