【问题标题】:More same id´s in document.getElementById("") [closed]document.getElementById("") 中有更多相同的 ID [关闭]
【发布时间】:2016-04-01 14:21:47
【问题描述】:

我有 157 个 id 的 html 文件

id="name"

我需要通过单击一个复选框将样式属性“display”从“none”更改为“block” 我有这个脚本:

function nms(){
      if (document.getElementById("name").style.display === 'block') document.getElementById("name").style.display = 'none';
      else {document.getElementById("name").style.display === 'block';}}

id每个中更改此属性。

我需要在每个不是第一个 id 上更改它。 我刚刚发现了这个:

$("[id=yourID]").

我需要在我的复选框中实现该代码,onclick 函数在第一次点击显示:块和第二次显示:无。

但它对我不起作用,我不能使用 document.getElementByClassName,因为我需要更改显示属性。

谢谢你的帮助,我不知道如何让它运行:-(

【问题讨论】:

  • 您不能拥有多个具有相同 ID 的元素。
  • 您的标记无效,因此 JavaScript 的行为未定义。 ids 必须是唯一的(顾名思义)。先修复标记。
  • ID 的全部意义在于它是唯一的,为可重复的选择属性使用一个类。
  • 我是不好的做法,在多个元素中使用相同的 ID,使用 class 属性
  • jq 快捷方式选择器,但 document.querySelectorAll("[id=yourID]"). 应该可以工作。

标签: javascript html checkbox getelementbyid getelementsbyclassname


【解决方案1】:

您可能想要使用其他属性,而不是 id。所有 HTML 元素上通用的类将是一个好主意。如果您的标记如下所示

<div class="name abc"></div>
<div class="name xyz"></div>
<div class="name pqr"></div>
<div class="name hjk"></div>

然后您可以编写 javascript 代码为所有这些设置display:block,如下所示

var elements = document.getElementsByClassName("name");
if (elements != null) {
    for (var i = 0; i < elements.length; i++) {
        if (elements[i].style.display === "block") {
            elements[i].style.display = "none";
        } else {
            elements[i].style.display = "block";
        }
    }
}

注意:在 HTML 中,多个 DOM 元素具有相同的 id 是无效的

编辑:添加了如果签入循环以允许切换

【讨论】:

  • 非常感谢,但我需要将该代码实现到我的 checkboxonclick 函数中,该函数在第一次单击时执行 display : block 和第二个 display : none。你能帮我吗?我试图做到这一点,但没有成功。感谢您的帮助,我很感激。
  • 编辑后立即检查新代码
  • 没有任何话可以感谢你。
【解决方案2】:

为什么你认为你不能使用getElementsByClassName?更改 display 属性与您选择元素的方式无关。

【讨论】:

  • 试了没用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2018-03-26
相关资源
最近更新 更多