javascript - 有什么方法可以编辑for循环吗?

标签 javascript html arrays for-loop

设置:

我有两个选择元素和一个按钮。

第一个选择元素 (id="mySelect") 填充了通过 HTML 添加的 3 个选项。另一个 (id="lvlDropMenu") 有 20 个选项,并使用 for 循环填充,这样如果我想更改 LvlDropMenu 的长度(我计划这样做),就不必手动添加或删除新选项。

我想做的事:

使用纯 JavaScript 当我单击“开始按钮”时,我想根据所选“mySelect”的数据层修改 LvlDropmenu 中显示的选项。

例如:

当我选择对象 1(它的数据层 = T1)并单击开始按钮时,我希望“lvlDropDown”仅显示选项 5-15。

问题:

理想情况下,我想使用类似于 slice() 的方法来提取和显示选项,但据我所知,它仅适用于字符串。

考虑到这一点,是否会更有效:

  • 创建一个包含 N 个值的数组
  • 创建一个 for 循环来遍历数组并添加新选项,每个值/innerHTML 等于 N++(选项 1、选项 2 等)
  • 根据所选对象的数据层创建 if 语句来 slice()/修改数组,以便依次修改 for 循环?

任何提示或可行的解决方案将不胜感激,因为我已经被踩了好几天了。

for (var i = 1; i <= 20;i++)
selectLvl.add(new Option(i));

var startBtn = document.getElementById("startBtn");
startBtn.addEventListener("click", start);

function start(){
var mySelect = document.getElementById("mySelect");

var selectedObjectTier = mySelect.options[mySelect.selectedIndex].getAttribute("data-tier");

if(selectedObjectTier == "T1")
{mySelect.length = 1}
//to make sure button/conditions work
//what I actually want is for the LvlDropMenu to display options 5-15
else{alert("Other")};;



};
<select id="mySelect" size="4">
  <option value="Object 1" data-tier="T1">Object 1</option>
  <option value="Object 2" data-tier="T2">Object 2</option>
  <option value="Object 3" data-tier="T3">Object 3</option>
</select>


<form id="lvlDropMenu">
  <select name="selectLvl" id="selectLvl">
        <option>Choose your Level:</option>
    </select>
</form>

<button type="button" id="startBtn" class="menu" >Start</button>

最佳答案

插入<form>一个新的<select>有特定选项 每次单击按钮时。

设置data-tier的预定义开始和结束

var dataTiers = {
  T1: [5, 15],
  T2: [3, 13],
  T3: [1, 10]
}

总共

var button = document.getElementById("startBtn");
var dataTiers = {
  T1: [5, 15],
  T2: [3, 13],
  T3: [1, 10]
}

function insertSelectIntoForm(formId, selectId, arr) { // id === name, arr -> [start, end]
  var form = document.getElementById(formId),
    select = document.createElement("select"),
    choose = new Option(),
    text = document.createTextNode("Choose your Level: ");

  form.innerHTML = ""; // Clear form

  select.setAttribute("name", selectId);
  select.setAttribute("id", selectId);
  choose.appendChild(text);
  select.appendChild(choose);

  for (var i = arr[0]; i < (arr[1] + 1); i += 1) { // arr[0] === start, arr[1] === end
    var option = new Option(i);
    option.setAttribute("value", i); // Set value
    select.appendChild(option);
  }
  form.appendChild(select);
}

function start() {
  var select = document.getElementById("mySelect"),
    dataTier = select.options[select.selectedIndex].getAttribute("data-tier");
  insertSelectIntoForm("lvlDropMenu", "selectLvl", dataTiers[dataTier]);
}

insertSelectIntoForm("lvlDropMenu", "selectLvl", [1, 20]);
button.addEventListener("click", start);
<select id="mySelect" size="4">
  <option value="Object 1" data-tier="T1">Object 1</option>
  <option value="Object 2" data-tier="T2">Object 2</option>
  <option value="Object 3" data-tier="T3">Object 3</option>
</select>

<!-- Empty form, select will be created with JavaScript -->
<form id="lvlDropMenu"></form>

<button type="button" id="startBtn" class="menu">Start</button>

关于javascript - 有什么方法可以编辑for循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48037515/

相关文章:

javascript - 计算动态添加的输入中的值

php - 如何从 php/mysql 加载 DojoX 日历的事件?

javascript - 打开本地文件与使用运行本地服务器

javascript - 如何将 Facebook API 与 Google Chrome 结合使用?

html - 是否可以使用 CSS 屏蔽或裁剪图像的形状?

html - 适用于基于 Web 的邮件客户端的背景最大宽度 + 背景渐变。 (展望和 Gmail)

html - bootstrap 中的 5 列不可能?

javascript - 如何将一串逗号分隔值转换为数据数组?

java - 用户自定义文件读取函数导致NullPointerException Java

javascript - 禁用 Sails.js 中的一些内置功能