首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据其他选择显示/隐藏选择列表中的项目

如何根据其他选择显示/隐藏选择列表中的项目
EN

Stack Overflow用户
提问于 2019-01-30 05:05:22
回答 1查看 118关注 0票数 0

在JavaScript中,如何根据包含一个或多个特定单词的另一个选定选项显示/隐藏选择列表中的项目?

我对JavaScript非常陌生,所以如果有任何帮助,我将不胜感激。

有两个下拉列表:"group“和"alph”。

代码语言:javascript
复制
<select name="group">
    <option value="Angry (Two)">Angry (Two)</option>
    <option value="Happy (Two)">Happy (Two)</option>
    <option value="Sad">Sad</option>
    <option value="Tired (One)">Tired (One)</option>
</select>

<select name="alph">
    <option value="ABC">ABC</option>
    <option value="ABC-1">ABC-1</option>
    <option value="ABC-2">ABC-2</option>
    <option value="DEF">DEF</option>
    <option value="DEF-1">DEF-1</option>
    <option value="DEF-2">DEF-2</option>
    <option value="DEF-3">DEF-3</option>
</select>

如果没有ID,对于第一个下拉列表(名称组),如果所选值包含“(Two)",则列表将仅显示:

代码语言:javascript
复制
<select name="alph">
    <option value="ABC-2">ABC-2</option>
    <option value="DEF-2">DEF-2</option>
</select>

如果用户更改了选择,并且所选值包含“(One)",则列表将仅显示:

代码语言:javascript
复制
<select name="alph">
    <option value="ABC-1">ABC-1</option>
    <option value="DEF-1">DEF-1</option>
</select>

如果用户更改了选择,并且所选值既不包含“(一)”,也不包含“(二)”,则列表将显示:

代码语言:javascript
复制
<select name="alph">
    <option value="ABC">ABC</option>
    <option value="DEF">DEF</option>
    <option value="DEF-3">DEF-3</option>
</select>

注意:我无法添加ID或属性。我只能访问select的名称和值。

EN

回答 1

Stack Overflow用户

发布于 2019-01-30 05:18:02

使用data-*创建组,然后使用querySelector获取所有选项并测试它们是否属于组。如果它们是组的一部分,则显示它们,否则隐藏它们。

代码语言:javascript
复制
// The main group
let groups = document.querySelector('select[name=group]')

// Add a change event
groups.addEventListener('change', (e) => {
  // Get the currently selected Group
  let current = e.target.options[e.target.selectedIndex]
  // Get the data-group number
  let group = current.getAttribute('data-group')
  // Get all the items from the second dropdown
  let opts = Array.from(document.querySelectorAll('select[name=alph]>option'))
  // Hide items that are not appart of the group
  opts.forEach(itm => itm.style.display = itm.getAttribute('data-group') == group || !itm.getAttribute('data-group') ? 'initial' : 'none')
  // Reset the the selection
  document.querySelector('select[name=alph]').selectedIndex = 0
})
代码语言:javascript
复制
/* Hide option two items by default */
select[name=alph]>option[data-group]{display:none;}
代码语言:javascript
复制
<select name="group">
    <option>Select One...</option>
    <option data-group="1" value="Angry (Two)">Angry (Two)</option>
    <option data-group="2" value="Happy (Two)">Happy (Two)</option>
    <option data-group="3" value="Sad">Sad</option>
    <option data-group="4" value="Tired (One)">Tired (One)</option>
</select>

<select name="alph">
    <option>Select One...</option>
    <option data-group="1" value="ABC">ABC</option>
    <option data-group="1" value="ABC-1">ABC-1</option>
    <option data-group="2" value="ABC-2">ABC-2</option>
    <option data-group="2" value="DEF">DEF</option>
    <option data-group="3" value="DEF-1">DEF-1</option>
    <option data-group="3" value="DEF-2">DEF-2</option>
    <option data-group="4" value="DEF-3">DEF-3</option>
</select>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54429553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档