微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有相同 ID 的两个元素 - 试图找出我可以更改的内容

如何解决具有相同 ID 的两个元素 - 试图找出我可以更改的内容

我正在构建一个日程安排应用程序并意识到我的保存按钮不起作用的原因是因为我有多个具有相同 ID 的元素。我的行有一个基于小时的 ID 号,moment.js 根据过去/现在/未来突出显示它们。而且我的输入也有一个基于小时的 ID 号,它与我的保存功能相匹配。我想出的一切来解决这个问题,只是把一切都搞砸了。有任何想法吗?谢谢。下面是我的 HTML 的一部分(我有 0900-1700 小时的行)和我的一些 JS。

HTML:

  <tr class="row" id="16">
            <th scope="time" id="hour16" class="time">16:00</th>
            <td><input type="text" class= "hourinput" id= "16"/></td>
            <td class="btnContainer">
              <button class="saveBtn" onclick="saveHour(16)"><i class="fas fa-save"></i></button>
            </td>
          </tr>
          <tr class="row" id="17">
            <th scope="time" id="hour17" class="time">17:00</th>
            <td><input type="text" class= "hourinput" id= "17"/></td>
            <td class="btnContainer">
              <button class="saveBtn" onclick="saveHour(17)"><i class="fas fa-save"></i></button>
            </td>
          </tr>

JS:

const rows = document.getElementsByClassName("row");
let currentHour = parseInt(moment().format('HH'));

Array.from(rows).forEach(row => {
  let
    rowIdString = row.id,rowHour;
    // TEST: console.log(rowIdString);
  if (rowIdString) {
    rowHour = parseInt(rowIdString);
  }
  if (rowHour) {
    // Compares row id to current hour and sets color with the setColor(); function----//
    if (currentHour === rowHour) {
      setColor(row,"rgb(181,88,110,0.55");
    } else if (currentHour < rowHour) {
      setColor(row,"rgb(255,255,0.45");
    } else if (currentHour > rowHour) {
      setColor(row,"rgb(85,46,109,0.35)");
    }
  }
});

// Set color function below----------------------------------------------------------//
function setColor(element,color) {
  element.style.backgroundColor = color;
};

// Add input to local storage-------------------------------------------------------//

const saveHour = (hour) => {
    const val = document.getElementById('hour').value;
    localStorage.setItem(`hour:${hour}`,val);
};

const savePlan = () => {
    const inputs = Array.from(document.getElementsByClassName('hourinput'));
    const plan = inputs.map((input) => input.value);
    localStorage.setItem('plan',JSON.stringify(plan));
}

window.addEventListener('load',() => {
    const inputs = document.getElementsByClassName('hourinput');
    const planStr = localStorage.getItem('plan');
    const plan = JSON.parse(planStr);

    // TEST:console.log(plan);

    if (plan) {
        for (let i = 0; i < inputs.length; i++) {
            inputs[i].value = plan[i];
        }
    } else {
        for (let i = 0; i < inputs.length; i++) {
            inputs[i].value = localStorage.getItem(`hour:${inputs[i].id}`);
        }
    }
});

任何帮助表示赞赏。对不起,这是很多代码。非常感谢。

解决方法

你不应该使用数字id,id应该以字母开头

您可以使用 querySelector() 获取输入值:

const val = document.querySelector('[id="' + hour + '"] .hourinput').value;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?