此问题已在此处有答案:
What do querySelectorAll and getElementsBy* methods return?(12个回答)
昨天关门了。
我正在尝试根据另一个div的内容来显示/隐藏一个div。这是一个简单的事情,但我是JS的新手,我似乎无法弄清楚它。如果价格是“免费”,我希望“美元”隐藏,如果它是任何数字,我希望它显示。
所以我们有多个div包含相同的东西。
if (document.getElementsByClassName("bookPrice") != null) {
var price = document.getElementsByClassName("price");
var priceTag = document.getElementsByClassName("priceTag");
if ((price.textContent = "Free")) {
priceTag.style.display = "none";
} else if (price.textContent != "Free") {
priceTag.style.display = "block";
}
}
<div class="priceParent">
<div class="priceTag">$</div>
<div class="price">Free</div>
</div>
<div class="priceParent">
<div class="priceTag">$</div>
<div class="price">60</div>
</div>
它有多个示例,我希望它们根据自己的div做出React,而不是作为一个整体。任何帮助都非常感谢。谢谢你。
3条答案
按热度按时间cx6n0qe31#
你可以这样做:
h6my8fg22#
getElementsByClassName()
returns an array-like list,您需要迭代它以便与每个元素交互。类似的函数是querySelectorAll()
,下面是如何访问所选项目的示例:https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll#accessing_the_matchesgetElementsByClassName
返回一个实时HTMLCollection,而querySelectorAll
返回一个静态NodeList。*我还调整了
display
属性,使tag/price彼此相邻显示,并添加了另一个类,通过CSS类而不是内联样式来切换。nue99wik3#
我想问题可能出在你的变量上。你把价格变量定义为:getElementsByClassName(“price”),变量将被转换为一个列表,因为您的代码告诉程序抓取多个项目。正因为如此,你写if语句的方式,它检查price变量,就好像它是一个常规变量,而不是一个列表。要解决这个问题,您可以添加一个for循环,遍历price list中的所有项目,并检查每个项目的索引是否具有等效值“Free”。