【发布时间】:2018-09-16 15:04:04
【问题描述】:
我想为一个列表创建一个过滤器,它只显示列表中与<select>(“0”或“1”)中给出的值匹配的元素。
function filterElements() {
var select = document.getElementById("select");
var filter = select.value;
var list = document.getElementById("listElements");
var elements = list.getElementsByTagName("li");
var valueElement;
for (var i = 0; i < elements.length; i++) {
valueElement = elements[i].value;
console.log("filter : "+filter+" ; value : "+valueElement+" ; equal : "+(valueElement===filter));
if (valueElement === filter)
elements[i].style.display = "";
else elements[i].style.display = "none";
}
}
<select id="select" onchange="filterElements()">
<option value="1">Value 1</option>
<option value="0">Value 0</option>
</select>
<ul id="listElements">
<li value="1">Element 1</li>
<li value="0">Element 2</li>
<li value="1">Element 3</li>
<li value="0">Element 4</li>
</ul>
当我比较过滤器的值和列表元素的值时,即使它们都是“0”或都是“1”,它总是在控制台中打印“false”。 我哪里做错了?
感谢您的帮助。
【问题讨论】:
-
LI 没有值属性。使用 data-value 和
valueElement = elements[i].getAttribute("data-value");如果要在字符串和数字之间进行转换,也可以使用==而不是=== -
@mplungjan [w3schools.com/tags/att_li_value.asp](They 有一个 value 属性)但实际上它是一个数字而不是一个字符串。
-
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness 并提防 w3schools,因为他们通常会传递过时或明显错误的信息。有关详细信息,请参阅http://www.w3fools.com/。
-
@Nope 幸运的是他们改进了很多。 w3fools 也提到了一个事实。不过我还是更喜欢 MDN
标签: javascript html filter html-select