【发布时间】:2019-05-15 18:00:49
【问题描述】:
我正在尝试在我的页面上设置一个函数,该函数将遍历一系列新闻标题,如果标题包含特定标记,则会删除标题。
标题从 WordPress 帖子数据库中提取并显示在 <div> 和 ID="news" 中。每个特定标题都是<a> 与class="title" 的链接。
我首先将所有标题收集到一个数组中,以便可以遍历它们,但由于某种原因,它无法正常工作。
我的代码是:
<script type="text/javascript">
//first I create the array
var test_DOM = document.getElementById("news").getElementsByClassName("title");
//then I set the marker
var marker = "[X]"
//then I wirte the function to iterate through the array://
function checkX() {
for(i in test_DOM){
if (i.includes(marker)) {
i = "<del>", i, "</del>";
console.log(test_DOM[i], "changed")
}
console.log(test_DOM[i].innerHTML)
}
};
//and I call the function
checkX()
预期的结果是看到要更改的新闻列表
[x] News 1
[EG] News 2
到
[x] News 1 <- struck through
[EG] News 2 <- still the same
但是,什么也没有发生。我知道 getElementsByClassName 给我一个对象数组,我应该使用 .innerHTML 和一些点,但是在函数中使用它,比如
function checkX() {
for(i in test_DOM){
if (i.innerHTML.includes(marker)) {
i.innerHTML = "<del>", i, "</del>";
console.log(test_DOM[i], "changed")
}
console.log(test_DOM[i].innerHTML)
}
};
给出“TypeError: i.innerHTML is undefined”的错误
【问题讨论】:
-
i = "<del>", i, "</del>";不组合字符串,它使用comma operator 并仅返回最后一项。i也不是test_DOM的每个 value 而是来自test_DOM的每个 key。 -
您是否检查了浏览器控制台中的错误?此外,getElementsByClassName() 返回一个“NodeList”对象,而不是预期的数组,因此在其上运行 for in 循环将运行所有属性,而不仅仅是项目索引。 NodeList 对象确实包含一个与索引长度相对应的长度属性,因此像这样的正常 for 循环应该可以工作。
for (i = 0; i < test_DOM.length; i++) -
@Kik4s 嘿,只是一个友好的提醒,如果它回答了您的问题,请将其标记为“已接受”。如果下面的 2 个现有答案不能完全回答您的问题,您可以发表评论以获得更多说明。谢谢!
标签: javascript arrays loops