You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改显示/隐藏按钮代码以针对Class而非ID生效?

解决Class类元素的显示/隐藏问题

我在WordPress中用Elementor搭建页面,原本针对ID实现显示/隐藏的代码可以正常运行,但改成针对Class后就失效了,以下是具体代码和解决方法:

原ID版本可正常运行代码

按钮代码:

<button onclick="myFunction()">show / hide</button>

JS逻辑代码:

function myFunction() {
  var x = document.getElementById("showprice");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
} 

修改为Class后的失效代码

function myFunction() {
  var x = document.getElementsByClassName("showprice");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
} 

问题原因

getElementsByClassName()返回的是HTMLCollection元素集合,不是单个DOM元素,不能直接通过.style访问样式属性,这就是代码失效的核心原因。

解决方法

方案1:批量控制所有Class匹配元素

如果需要同时控制所有带showprice类的元素,遍历集合逐个处理:

function myFunction() {
  var elements = document.getElementsByClassName("showprice");
  for (var i = 0; i < elements.length; i++) {
    var elem = elements[i];
    if (elem.style.display === "none") {
      elem.style.display = "block";
    } else {
      elem.style.display = "none";
    }
  }
}

方案2:控制单个Class匹配元素

如果页面中只有一个目标元素,用querySelector()直接获取第一个匹配的元素:

function myFunction() {
  var x = document.querySelector(".showprice");
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}

优化:处理CSS类设置的样式

如果元素的display是通过CSS类(而非内联style)设置的,用window.getComputedStyle()获取实际生效的样式:

function myFunction() {
  var elements = document.getElementsByClassName("showprice");
  for (var i = 0; i < elements.length; i++) {
    var elem = elements[i];
    var currentDisplay = window.getComputedStyle(elem).display;
    if (currentDisplay === "none") {
      elem.style.display = "block";
    } else {
      elem.style.display = "none";
    }
  }
}

内容的提问来源于stack exchange,提问作者Kitka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:45:10