JavaScript 获取多个已知元素 ID

标签 javascript html css

我正在通过制作 Angular 色表 (rpg) 来学习 JS,我得到了一个这样设置的表单

<fieldset id="char-int">
  <label for="int">INT</label>
  <input id="int" name="int" placeholder="40" type="number" min="0" max="100">
  <input id="int-hard" name="int-hard" placeholder="20" type="number" min="0" max="100">
  <input id="int-extr" name="int-extr" placeholder="6" type="number" min="0" max="100">
</fieldset>

我需要使用简单的舍入除法更改 int-hardint-extr 中的值.

window.onchange  = changevalue;

function changevalue() {
  var hardRoll = document.getElementById("int").value / 2;
  var extrRoll = document.getElementById("int").value / 5;

  var setStat = document.getElementById("str-hard").value = Math.floor(hardRoll);
  var setStat = document.getElementById("str-extr").value = Math.floor(extrRoll);

这行得通,但必须有更聪明的方法来做到这一点,因为我有多个 ID 我想做同样的事情,比如 STR、DEX 等。

最佳答案

您可以从输入中删除 id 并在 fieldset 的上下文中工作,如下所示:

<fieldset id="char-int">
  <label>
    INT
    <input name="int" placeholder="40" type="number" min="0" max="100">
  </label>
  <input name="int-hard" placeholder="20" type="number" min="0" max="100">
  <input name="int-extr" placeholder="6" type="number" min="0" max="100">
</fieldset>
function changevalue() {
    var fieldset = document.getElementById("char-int");
    var intField = fieldset.querySelector('["name=int"]');
    var intHardField = fieldset.querySelector('["name=int-hard"]');
    var intExtrField = fieldset.querySelector('["name=int-extr"]');
    // ...
}

(请注意,我还将您的 name="int" 字段移到了 label 中,因此我们不必使用 id 来链接它们。)

querySelector 在您调用它的元素中找到与给定 CSS 选择器匹配的第一个元素。 (还有 querySelectorAll,它查找所有匹配元素的列表。)

根据您可以参数化 changevalue 函数的实际逻辑的程度,您可以将名称更改为不包含 int-(或添加类),然后传入字段集(或字段集实例本身)的id

<fieldset id="char-int">
  <label>
    INT
    <input id="int-main" name="main" placeholder="40" type="number" min="0" max="100">
  </label>
  <input name="hard" placeholder="20" type="number" min="0" max="100">
  <input name="extr" placeholder="6" type="number" min="0" max="100">
</fieldset>
function changevalue(fieldSetId) {
    var fieldset = document.getElementById(fieldSetId);
    var mainField = fieldset.querySelector('["name=main"]');
    var hardField = fieldset.querySelector('["name=hard"]');
    var extrField = fieldset.querySelector('["name=extr"]');
    // ...
}

所有现代浏览器以及 IE8 都支持 QS 和 QSA。

关于JavaScript 获取多个已知元素 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28905512/

相关文章:

css - :active selector in IE11 doesn't work if there are nested elements? 如何让点击忽略嵌套元素?

javascript - 减少 MathJax 大小

javascript - Meteor 是否存在 ACL 的 mongo 注入(inject)问题?

html - 使用 max-width 将容器调整为窗口高度

php - 如何在 php 中清理从 url 到 mysql 的简单 _GET 输入

javascript - 如何将 css 样式应用于带有 td 和 input 标签的动态 tr?

对现有对象调用 new Object() 的 Javascript 优化

javascript - JS 使用通配符创建数组

javascript - 如何设置图像对象在特定步骤后停止移动

html - 在我的页面中使用 reboot.css 和样式 h1