使用querySelectorAll选择多个元素

时间:2013-12-19 09:35:29

标签: javascript css-selectors selectors-api

我有这段代码:

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

如果我想将textareaselect添加到查询中,我最终会这样:

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 个答案:

答案 0 :(得分:7)

正如影子向导所说,至少你可以删除它没有意义的各个地方的不必要的: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通常也是这个东西的好地方。

答案 1 :(得分: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]),