2013-12-19 65 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]),