无法读取未定义的 属性 'replace' - 替换生成的 JS 中的文本 HTML
Cannot read property 'replace' of undefined - replacing text in JS generated HTML
我有一个由外部 javascript 生成的无序列表 (ul
)。在每个列表项中,我想删除一个重复的行。因为我无法修改外部 javascript,所以我尝试使用替换方法。该列表由每个 li
元素的 class 标识; rss-item
.
以下是我的代码:
<script>
function myFunction() {
var str = document.getElementsByClassName('rss-item').innerHTML;
var res = str.replace('Text to replace', '');
document.getElementsByClassName('rss-item').innerHTML = res;
}
</script>
<button onclick="myFunction()">Replace</button>
错误发生在以下行:
var res = str.replace('Text to replace', '');
错误状态:
Uncaught TypeError: Cannot read property 'replace' of undefined
据我了解,这可能意味着 javascript 要么找不到名称为 class 'rss-item' 的元素,要么找不到我要替换的文本。我绝对确定这是正确的 class 名称,并且我要替换的文本确实存在。出现此问题是因为标记是由 javascript 生成的吗?我走到了死胡同。
document.getElementsByClassName('rss-item')
returns 类数组对象(HTMLCollection)。如果你想要第一个元素,你应该要求它:
var str = document.getElementsByClassName('rss-item')[0].innerHTML;
如果您想更具防御性,可能值得实际检查是否已找到任何元素,使用如下内容:
var elements = document.getElementsByClassName('rss-item');
if (elements.length > 0) {
elements[0].innerHTML = elements[0].innerHTML.replace('Text to replace', '');
}
正如您在评论中所建议的,您可能希望对找到的所有元素执行替换。在这种情况下,您可以像这样遍历元素:
var elements = document.getElementsByClassName('rss-item');
for (var i = 0; i < elements.length; ++i) {
elements[i].innerHTML = elements[i].innerHTML.replace('Text to replace', '');
}
我有一个由外部 javascript 生成的无序列表 (ul
)。在每个列表项中,我想删除一个重复的行。因为我无法修改外部 javascript,所以我尝试使用替换方法。该列表由每个 li
元素的 class 标识; rss-item
.
以下是我的代码:
<script>
function myFunction() {
var str = document.getElementsByClassName('rss-item').innerHTML;
var res = str.replace('Text to replace', '');
document.getElementsByClassName('rss-item').innerHTML = res;
}
</script>
<button onclick="myFunction()">Replace</button>
错误发生在以下行:
var res = str.replace('Text to replace', '');
错误状态:
Uncaught TypeError: Cannot read property 'replace' of undefined
据我了解,这可能意味着 javascript 要么找不到名称为 class 'rss-item' 的元素,要么找不到我要替换的文本。我绝对确定这是正确的 class 名称,并且我要替换的文本确实存在。出现此问题是因为标记是由 javascript 生成的吗?我走到了死胡同。
document.getElementsByClassName('rss-item')
returns 类数组对象(HTMLCollection)。如果你想要第一个元素,你应该要求它:
var str = document.getElementsByClassName('rss-item')[0].innerHTML;
如果您想更具防御性,可能值得实际检查是否已找到任何元素,使用如下内容:
var elements = document.getElementsByClassName('rss-item');
if (elements.length > 0) {
elements[0].innerHTML = elements[0].innerHTML.replace('Text to replace', '');
}
正如您在评论中所建议的,您可能希望对找到的所有元素执行替换。在这种情况下,您可以像这样遍历元素:
var elements = document.getElementsByClassName('rss-item');
for (var i = 0; i < elements.length; ++i) {
elements[i].innerHTML = elements[i].innerHTML.replace('Text to replace', '');
}