【问题标题】:Filter getElementsByTagName list by option values按选项值过滤 getElementsByTagName 列表
【发布时间】:2012-08-07 08:30:59
【问题描述】:

我正在使用 getElementsByTagName 返回页面上的所有选择列表 - 是否可以根据选项值(即列表中的第一项或第二项)过滤这些?

原因是由于我不会在这里讨论的原因,这里有一个带有数字值(1、2、3、4、5 等)的选择列表块和其他带有文本值(蓝色和黑色,红色)的选择列表和黑色等),我只希望我必须在具有数值的脚本上运行脚本。我无法向它们添加一个更容易让我这样做的类,但是我可以确定列表中的第一个选项值将是“1”。

因此,有没有一种方法可以仅根据第一个选项值为“1”的选项过滤页面上返回的选择列表?

【问题讨论】:

    标签: filtering getelementsbytagname


    【解决方案1】:

    我很确定有更好的解决方案,但目前您可以尝试以下方法:

    var allSelect = document.getElementsByTagName("select");
    
    var result = filterBy(allSelect, 0/*0 == The first option*/, "1"/* 1 == the value of the first option*/);
    
    
    function filterBy(allSelect, index, theValue) {
        var result = [];
        for (var i = 0; i < allSelect.length; i++) {
            if(allSelect[i].options[index].value == theValue ) {
                result.push(allSelect[i]);
            }    
        }
        return result;            
    }
    

    【讨论】:

    • 谢谢你,我试着让它适应现有的脚本,但我的技能显然不够好。预先存在的小提琴位于jsfiddle.net/hBf2t/17,如果这有任何帮助,我已经添加了一个新的(注释掉的)选择列表(应该被上面提到的过滤器跳过)以及 j/ 中的评论s 我认为应该进行过滤的地方。我需要的只是正确的脚本,以便在对列表进行任何其他操作之前将过滤应用到我的列表。
    • 更新:通过在这个 if 语句“if (inputs[i]. options[1].text == 1) {" (我不得不将选项索引从 0 更改为 1,因为 0 选项是“请选择”。
    【解决方案2】:

    我设法通过在要执行的操作(在本例中为禁用选项)周围包装一个简单的 IF 语句来实现此功能,如下所示:

        inputs = document.getElementsByTagName('select');
    
        for (i = 0; i < inputs.length; i++) {
          if (inputs[i].options[1].text == 1) {
          // perform action required
          }
        }
    

    毫无疑问,有一种更巧妙或更经济的方法可以做到这一点,但主要是它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多