jquery - 使用 jQuery 按数据属性操作选项

标签 jquery html

我有一个带有选项的下拉菜单,我想根据它们的 data-* 属性使用 jQuery 更改它们(在这种情况下,隐藏所有选项,然后仅显示具有 X 属性的选项)

下拉列表:

<button onclick="changeopts(10)">click me</button>

<select id="testsel">
        <option data-test="10" value="0">opt1</option>
        <option data-test="11" value="5">opt2</option>
        <option data-test="12" value="200">opt3</option>
</select>

Javascript:

function changeopts(show){
       var opts = document.getElementById("testsel").options;

       $(opts).prop('disabled',true);
       $(opts).css('display','none');

       if ($(opts).attr('data-test')==show){
             $(opts).prop('disabled',false);
             $(opts).css('display','inline');
       }
}

这行不通。我假设 if 语句不能同时查看所有选项。如果可能,我想避免遍历所有选项。


我使用的解决方案:

function changeopts(show){
            var opts = document.getElementById("testsel").options;

            $(opts).prop('disabled',true);
            $(opts).css('display','none');

            $('#testsel option[data-test="'+show+'"]').prop('disabled',false);
            $('#testsel option[data-test="'+show+'"]').css('display','inline');
        }

最佳答案

您可以将“显示”值作为选择器传递:

function changeopts(show) {
  $('#testsel option').hide();
  $('#testsel option[data-test="'+show+'"]').show();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="changeopts(12)">click me</button>

<select id="testsel">
  <option data-test="10" value="0">opt1</option>
  <option data-test="11" value="5">opt2</option>
  <option data-test="12" value="200">opt3</option>
</select>


奖金

根据您的实际代码,我看到即使您过滤选项,默认的第一个仍然被选中,您可以添加另一行代码以将第一个匹配元素设置为默认值:

function changeopts(show) {
  $('#testsel option').hide();
  $('#testsel option[data-test="'+show+'"]').show();
  $('#testsel option[data-test="'+show+'"]').first().attr('selected',true)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="changeopts(12)">click me</button>

<select id="testsel">
  <option data-test="10" value="0">opt1</option>
  <option data-test="11" value="5">opt2</option>
  <option data-test="12" value="200">opt3</option>
  <option data-test="12" value="210">opt3.1</option>
</select>

关于jquery - 使用 jQuery 按数据属性操作选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353508/

相关文章:

javascript - 根据下拉列表的选择提交来自不同字段的数据 - laravel

jquery - 如何使用jquery每5秒添加顶部属性的值

javascript 随机生成 nr + 循环

html - html疑惑中的第n个 child

javascript - 使用 JavaScript/php 的下一个上一个函数

javascript - 如何检测 tinyMCE textarea blur/focusout 事件?

jquery - 在轮播中居中对齐动态幻灯片(BXSlider)

javascript - 如何在 HTML5 音频中播放特定的开始和结束持续时间?

javascript - 仅使用浏览器按钮的 Onhashchange

javascript - 使用 jquery 将图像 API src 转换为 <img>