2012-08-06 82 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 
     } 
    } 

毫無疑問是有雨衣或更經濟的方式來做到這一點,但更主要的是它爲我工作。