按选项值过滤getElementsByTagName列表

时间:2012-08-06 16:08:28

标签: filtering getelementsbytagname

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

原因是由于我不会进入这里的原因,有一个带有数字值的选择列表块(1,2,3,4,5等)和其他有文本值的列表(蓝色和黑色,红色)和黑色等)我只想要脚本我必须在具有数值的那些上运行。我不能为他们添加一个更容易让我这样做的类,但是我可以确定列表中的第一个选项值是“1”。

因此,有没有办法只在第一个选项值为“1”的页面上过滤返回的选择列表?

2 个答案:

答案 0 :(得分: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;            
}

答案 1 :(得分:1)

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

    inputs = document.getElementsByTagName('select');

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

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