2013-12-19 64 views
8

我有這樣一段代碼多個元素:如果我想補充的textareaselect到我結束了這個查詢選擇具有querySelectorAll

var requiredFields = el.querySelectorAll("input[required]:not(:disabled):not([readonly]):not([type=hidden])"); 

var requiredFields = el.querySelectorAll("input[required]:not(:disabled):not([readonly]):not([type=hidden])"+ 
",select[required]:not(:disabled):not([readonly]):not([type=hidden])"+ 
",textarea[required]:not(:disabled):not([readonly]):not([type=hidden])"); 

我感覺說這可能會更好..但如何?

獎勵:請給我一個很好的querySelectorAll函數資源。

+2

僅供參考,select和textarea元素沒有任何類型屬性。 –

+0

什麼是var'el'? –

+0

@ShadowWizard你是對的,CopyPasta剩菜。 @Kevin'el' = document.body。 – A1rPun

回答

6

影子嚮導說,至少可以消除在各個地方的不必要:not([type=hidden])它沒有什麼意義(selecttextarea)。

我看不出結果的問題:

var requiredFields = el.querySelectorAll(
    "input[required]:not(:disabled):not([readonly]):not([type=hidden])" + 
    ",select[required]:not(:disabled):not([readonly])"+ 
    ",textarea[required]:not(:disabled):not([readonly])"); 

......這不僅是因爲它交給了整個事情關閉的選擇器引擎採取任何優化它可以做的優勢。

或者你可以給所有的相關投入一個共同的類,然後使用:

var requiredFields = el.querySelectorAll(
    ".the-class[required]:not(:disabled):not([readonly]):not([type=hidden])"); 

...但我不知道它給你買了。

請給我一個很好的querySelectorAll函數的資源。

the specificationMDN通常也是這個東西的好地方。

3

querySelectorAll


window.l = ['input','textarea','select']; 
function myQuerySelectorAll() { 
    q = ''; 
    t = '[required]:not(:disabled):not([readonly]):not([type=hidden])'; 
    l.forEach(function(e) { 
     q += e; 
     q += t; 
     q += ','; 
    }); 
    console.log(q) 
} 

$> myQuerySelectorAll(); 
$> input[required]:not(:disabled):not([readonly]):not([type=hidden]),textarea[required]:not(:disabled):not([readonly]):not([type=hidden]),select[required]:not(:disabled):not([readonly]):not([type=hidden]),