Выбор нескольких элементов с помощью querySelectorAll

у меня есть этот кусок кода:

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

если я хочу добавить textarea и select на запрос я заканчиваю с этим:

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 ответов


как сказал Shadow Wizard, как минимум, вы можете удалить ненужные :not([type=hidden]) в разных местах это не имеет никакого значения (select и textarea).

Я не вижу проблемы с результатом:

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.

здесь спецификация. MDN также обычно хорошее место для этого.


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]),