2011-04-14 29 views

回答

8

你已經有了它主要是正確的 - 除非代碼在運行a browser which supports querySelectorAll。這是跨瀏覽器的代碼:

var textInputs; 
if (document.querySelectorAll) 
{ 
    textInputs = document.querySelectorAll('input[type=text]'); 
} 
else 
{ 
    textInputs = []; 
    var unfiltered = document.getElementsByTagName("input"), 
     i = unfiltered.length, 
     input; 
    while(i--) 
    { 
     input = unfiltered[i]; 
     if (!input.type || input.type === 'text') 
     { 
      textInputs.push(input); 
     } 
    } 
} 

N.B.else情況下,我檢查的input.type的情況下,感實性輸入是這樣的:

在這種情況下 默認 type="text"
<input /> 

。我只有包括這個,因爲我不是100%確定是否每個瀏覽器將返回"text"屬性被關閉時。對於記錄,至少鉻做。 http://jsfiddle.net/mattball/jJsjn/

+0

嗨,matt,有沒有很好的資源來查看這些瀏覽器方法功能的列表以及它們的支持? – john 2011-04-14 02:23:28

+0

當然!這聽起來像你可能已經錯過了我的答案quirksmode的鏈接,所以這裏又是:http://www.quirksmode.org/dom/w3c_core.html#t13 – 2011-04-14 02:24:19

+0

Chrome離開它時會返回'text',但你不能在querySelector中使用它。更新你的小提琴以顯示它:http://jsfiddle.net/rLq6xjb5/ – 2016-04-03 22:02:57

2

這是你如何能做到這:)

var elements = document.getElementsByTagName('input') 
for(var e in elements) 
{ 
    if(e.type == "text") 
    { 
    } 
} 
0

它實際上是一個sizzlejs特異性不jQuery的本身。是的,放棄jquery是很好的。 DOM0集合將以最佳方式執行此任務:

for (var i = 0; i < document.forms.length; i++) 
    for (var j = 0; j < document.form[i].elements.length; j++) 
    /* have to do case-insensitive match to support any DOCTYPE */ 
    if (document.form[i].elements[j].type.toUpperCase() == 'TEXT') 
     document.form[i].elements[j] = 'HAI!'; 
     /* done! */ 
相關問題