我使用用户输入的值来执行此操作。
以下是完整的代码:https://jsfiddle.net/7196dfyz/
这是遍历元素的代码的一部分,在这里我遇到了麻烦:
var lists = $ul.getElementsByTagName("li");
for (var i = 0; i < lists.length; ++i) {
if (lists[i] == value) {
$("ul").css("background-color","black");
}
}
第一个输入应采用某些li
中的值并且第二输入应当采用相应的父CCD_ 2类名。
我想这就是您想要的。(这是一个更新的jsfiddle):
function func() {
var key = $("#key").val();
var value = $("#entry").val();
var $ul = $("." + key);
var lists = $ul.find("li");
for (var i = 0; i < lists.length; ++i) {
console.log($(lists[i]).text(), value);
if ($(lists[i]).text() === value) {
$(lists[i]).css("background-color","black");
}
}
}
您有几个问题:
$ul.getElementsByTagName
不是有效的函数。因为$ul
在这一点上是一个类似jQuery数组的对象,所以它不起作用。您需要执行$ul[0].getElementsByTagName
,或者像上面的例子一样简单地使用jQuery的find()
- 您正在尝试将
lists[i]
和值进行比较,该值恰好是一个HTML元素。当与字符串进行比较时,它将返回<li>Say</li>
,它永远不会与您键入的任何内容相匹配。使用$(lists[i]).text()
应该可以得到您需要的内容 $("ul").css("background-color","black");
:如果找到匹配项,则将每个ul
设置为黑色。我想你只想匹配匹配的那个。$(lists[i]).css("background-color","black");
修复了此问题
你甚至可以将整个功能简化为:
function func() {
var key = $("#key").val();
var value = $("#entry").val();
$("." + key).find("li").filter(function() {
return $(this).text() === value;
}).css("background-color","black");
}
分解:
$("." + key)
:查找类为key
的ul.find("li")
在找到的每个无序列表中查找所有列表项.filter(...)
对于此列表中的每个元素,只向我返回符合我的条件的项:$(this).text() === value
- 最后
.css("background-color","black")
:将filter()
函数返回的列表项的所有背景色设置为黑色