querySelectorAll具有多个条件

时间:2015-11-30 15:20:27

标签: javascript

是否可以使用多个不相关的条件通过querySelectorAll进行搜索?如果有,怎么样?以及如何指定这些是AND还是OR标准?

例如:

如何通过一次 querySelectorAll 调用找到所有表单 p 图例?可能的?

4 个答案:

答案 0 :(得分:88)

  

是否可以使用多个不相关的条件通过querySelectorAll进行搜索?

是的,因为querySelectorAll接受完整的CSS选择器,而CSS具有selector groups的概念,它允许您指定多个不相关的选择器。例如:

var list = document.querySelectorAll("form, p, legend");

...将返回包含form p legend的任何元素的列表。

CSS还有另一个概念:基于更多标准的限制。您只需组合选择器的多个方面。例如:

var list = document.querySelectorAll("div.foo");

...将返回)拥有类div的所有foo元素的列表,忽略其他{{ 1}}元素。

当然,你可以将它们结合起来:

div

...表示"包含同时拥有var list = document.querySelectorAll("div.foo, p.bar, div legend"); 类的任何div元素,还包含foo类的任何p元素,以及bar内的任何legend元素。"

答案 1 :(得分:6)

根据文档,就像使用任何css选择器一样,您可以根据需要指定任意数量的条件,并将它们视为逻辑“OR”。

  

此示例返回文档中所有div元素的列表   有一类“注意”或“警告”:

var matches = document.querySelectorAll("div.note, div.alert");

来源:https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll

同时为了获得“AND”功能,您可以使用多属性选择器,如jquery所说:

https://api.jquery.com/multiple-attribute-selector/

离。 "input[id][name$='man']"指定元素的id和名称,并且必须满足这两个条件。对于类来说,要求2个类的对象就像“.class1.class2”一样明显。

两者的所有可能组合都是有效的,因此您可以轻松获得更复杂的“OR”和“AND”表达式。

答案 2 :(得分:1)

是的,querySelectorAll确实需要group of selectors

form, p, legend

答案 3 :(得分:-1)

使用纯JavaScript,您基本上可以做到这一点(例如SQL):

<html>

<body>

<input type='button' value='F3' class="c2" id="btn_1">
<input type='button' value='F3' class="c3" id="btn_2">
<input type='button' value='F1' class="c2" id="btn_3">

<input type='submit' value='F2' class="c1" id="btn_4">
<input type='submit' value='F1' class="c3" id="btn_5">
<input type='submit' value='F2' class="c1" id="btn_6">

<br/>
<br/>

<button onclick="myFunction()">Try it</button>

<script>
    function myFunction() 
    {
        var arrFiltered = document.querySelectorAll('input[value=F2][type=submit][class=c1]');

            arrFiltered.forEach(function (el)
            {                
                var node = document.createElement("p");
                
                node.innerHTML = el.getAttribute('id');

                window.document.body.appendChild(node);
            });
        }
    </script>

</body>

</html>