Javascript:遍历数组并修改数组中的项
我正在尝试在我的页面上设置一个函数,该函数将遍历一系列新闻标题,如果标题包含特定标记,则删除标题 标题从WordPress post数据库中提取,并显示在带有Javascript:遍历数组并修改数组中的项,javascript,arrays,loops,Javascript,Arrays,Loops,我正在尝试在我的页面上设置一个函数,该函数将遍历一系列新闻标题,如果标题包含特定标记,则删除标题 标题从WordPress post数据库中提取,并显示在带有ID=“news”的中。每个特定标题都是带有class=“title”的链接。 我首先将所有标题收集到一个数组中,这样我就可以遍历它们,但由于某些原因,它不能正常工作 我的代码是: <script type="text/javascript"> //first I create the array var test_DOM =
ID=“news”
的
中。每个特定标题都是带有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我想我理解你的意图,并为你找到了解决方案。要使脚本按照您所描述的方式工作,需要更新以下几项内容:
可以使用document.querySelectorAll
缩短DOM查询
使用String.includes()
时,它区分大小写。这意味着[x]
不等于[x]
,因此请务必检查测试的正确版本
正如@2pha在他们的评论中提到的,test\u DOM
将返回一个NodeList
,它是一个类似于数组的结构,但不完全是数组。要将其转换为可以按照您的意愿循环的数组,可以使用[].slice.call(test\u DOM)
正如@VLAZ在他们的评论中提到的,逗号运算符不会组合字符串。您应该使用'string'+'string'
语法来组合字符串
同样正如@VLAZ所提到的,for…in
循环更适合对象,它将输出对象的键,而不是值,因此这不适合您的用例。您可以改用Array.forEach()
正如您提到的,Array.includes()
检查应使用innerHTML
进行检查,然后应使用innerHTML
重置元素的值
我在下面添加了一个片段,并做了一些修改
var test_DOM=document.queryselectoral('#news.title');
变量标记='[x]';
函数checkX(){
[].slice.call(test_DOM).forEach(function(elem,i){
if(elem.innerHTML.includes(marker)){
elem.innerHTML=''+elem.innerHTML+'';
}
});
}
检查X()
[x] 新闻1
新闻2
继续我的评论。
例如,“getElementsByCassName()返回一个“NodeList”对象,而不是预期的数组”。但是它有一个长度属性。
对代码进行最小的更改以使其正常工作
//首先我创建数组
var test_DOM=document.getElementById(“新闻”).getElementsByClassName(“标题”);
//然后我设置了标记
var marker=“[X]”
//日志(test_DOM);
//然后,我创建函数以遍历数组://
函数checkX(){
对于(i=0;i
标题1
[十] 标题2
标题3
i=“”,i“”
不组合字符串,它使用并仅返回最后一项。另外,i
不是test\u DOM
的每个值,而是test\u DOM
中的每个键。是否在浏览器控制台中检查了错误?另外,getElementsByCassName()返回一个“NodeList”对象,而不是预期的数组,因此在其上运行for-in循环将运行所有属性,而不仅仅是项索引。NodeList对象确实包含一个与索引长度相对应的length属性,因此像这样的notmal for循环应该可以工作for(i=0;i
@Kik4s嘿,这只是一个友好的提醒,如果答案回答了您的问题,请将其标记为“已接受”。如果下面的两个现有答案不能完全回答您的问题,您可以留下评论以获得更多的澄清。谢谢jackrugile的答案比我的更深刻(一个可能应该是被接受的答案),但是我的答案应该让你很容易理解为什么你的特定代码不起作用。
[x] News 1
[EG] News 2
[x] News 1 <- struck through
[EG] News 2 <- still the same
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)
}
};