2012-08-06 107 views
0

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

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

因此,是否有一种方法来筛选返回的页面上的选择列表只有那些谁的第一个选项值是“1”?

回答

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;    
} 
+0

谢谢你,我试着让它适应现有的脚本,但我的技能显然不够好。预先存在的小提琴在http://jsfiddle.net/hBf2t/17/,如果有任何帮助,我已经添加了一个新的(注释掉的)选择列表(这应该被上面提到的过滤器忽略)以及我认为过滤应该发生的j/s中的评论。我需要的只是正确的脚本,在对它们进行任何其他操作之前将过滤应用于我的列表。 – 2012-08-06 23:31:03

+0

UPDATE:通过包装在每个列表中执行的操作(如上面的for循环中所述),在此if语句中管理它以使其工作:if(inputs [i] .options [1] .text = = 1){“(我必须将选项索引从0更改为1,因为0选项是”请选择“。 – 2012-08-07 00:24:28

1

我设法通过包装简单的得到这个工作如果要进行绕操作语句(在这种情况下,禁用选项)如下:

inputs = document.getElementsByTagName('select'); 

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

毫无疑问是有雨衣或更经济的方式来做到这一点,但更主要的是它为我工作。