कई शर्तों के साथ querySelectorAll


104

क्या कई असंबंधित स्थितियों का उपयोग करके querySelectorAll द्वारा खोज करना संभव है? यदि हाँ तो कैसे? और कैसे निर्दिष्ट करें कि क्या वे और या मानदंड हैं?

उदाहरण के लिए:

एक एकल क्वेरी के साथ सभी फॉर्म एस, पी एस और लीजेंड एस कैसे खोजें? मुमकिन?


मुझे यकीन नहीं है कि आप " और या या मापदंड " से क्या मतलब है । क्या आप इसके लिए एक उदाहरण दे सकते हैं?
बर्गी

जवाबों:


174

क्या querySelectorAllकई असंबंधित शर्तों का उपयोग करके खोज करना संभव है ?

हाँ, क्योंकि querySelectorAllपूर्ण CSS चयनकर्ताओं को स्वीकार करता है, और CSS में चयनकर्ता समूहों की अवधारणा है , जो आपको एक से अधिक असंबंधित चयनकर्ता को निर्दिष्ट करने की अनुमति देता है। उदाहरण के लिए:

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

... किसी भी तत्व यह है कि एक से युक्त एक सूची प्रदान करेगा form या p या legend

CSS की दूसरी अवधारणा भी है: अधिक मानदंडों के आधार पर प्रतिबंध। आप बस एक चयनकर्ता के कई पहलुओं को जोड़ते हैं। उदाहरण के लिए:

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

... सभी की एक सूची प्रदान करेगा divतत्वों को भी ( और ) वर्ग है fooअन्य अनदेखी, divतत्वों।

आप निश्चित रूप से, उन्हें जोड़ सकते हैं:

var list = document.querySelectorAll("div.foo, p.bar, div legend");

... जिसका अर्थ है "किसी भी divतत्व को शामिल करें जिसमें fooवर्ग भी है , कोई भी pतत्व जिसमें barवर्ग भी है , और कोई भी legendतत्व जो अंदर भी है div।"


क्या डॉक्युमेंट से एक वर्ग का उपयोग करने की संभावना है ।querySelectorAll, उदाहरण के लिए मेरे पास var hotspots = document.querySelectorAll ("। clickMapItem.text, .clickMapItem.multiImageText") है; var i; for (i = 0; i <hotspots.length; i ++) {हॉटस्पॉट्स [i] .style.display = "कोई नहीं"; } मुझे और स्टेटमेंट का उपयोग करने की आवश्यकता है, यह कैसे जांचना है कि यह एक क्लास डिस्प्ले है या कुछ और नहीं है। अगर (हॉटस्पॉट [0 या 1] .style.display == "कोई नहीं") काम नहीं करता है।
माइल मिजाटोविक

1
@MileMijatovic: प्रश्नों को टिप्पणियों के बजाय प्रश्नों के रूप में पोस्ट किया जाना चाहिए। लेकिन देखें: stackoverflow.com/questions/25238153/…
TJ Crowder

ठीक है, लेकिन सामान्य तौर पर, क्या मैंने जो पूछा वह करना संभव है? लिंक ने मदद नहीं की
माइल मिजाटोविक

चयनकर्ता समूहों की अवधारणा ने 2018 में मेरे लिए अभी भी काम किया ... साझा करने के लिए धन्यवाद
एरिक हेपरले - कोडस्लेयर 2010

17

प्रलेखन के अनुसार, किसी भी सीएसएस चयनकर्ता के साथ की तरह, आप जितनी चाहें उतनी शर्तें निर्दिष्ट कर सकते हैं, और उन्हें तार्किक या 'के रूप में माना जाता है।

यह उदाहरण दस्तावेज़ के भीतर "नोट" या "अलर्ट" के वर्ग के साथ सभी दिव्य तत्वों की सूची देता है:

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

स्रोत: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll

इस बीच, 'और' कार्यक्षमता प्राप्त करने के लिए आप उदाहरण के लिए, मल्टीकाटर चयनकर्ता का उपयोग कर सकते हैं, जैसा कि jquery कहता है:

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

पूर्व। "input[id][name$='man']" तत्व की आईडी और नाम दोनों को निर्दिष्ट करता है और दोनों शर्तों को पूरा किया जाना चाहिए। कक्षाओं के लिए यह .class1.class22 वर्गों की वस्तु की आवश्यकता के रूप में स्पष्ट है ।

दोनों के सभी संभावित संयोजन मान्य हैं, इसलिए आप आसानी से अधिक परिष्कृत 'या' और 'और' भावों के बराबर प्राप्त कर सकते हैं।


2
जबकि विधि स्वयं सही है, सीएसएस को समझाने के लिए jQuery का संदर्भ देने की आवश्यकता नहीं है (विशेषकर चूंकि ओपी का प्रश्न जावास्क्रिप्ट तक सीमित है)।
चाए कूपर


0

शुद्ध जावास्क्रिप्ट के साथ आप ऐसा कर सकते हैं (जैसे एसक्यूएल) और कुछ भी जिसकी आपको आवश्यकता है, मूल रूप से:

<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>


1
यह वास्तव में सवाल का जवाब नहीं देता है, विशेष रूप से how to specify whether those are AND or OR criteriaभाग, स्वीकार किए जाते हैं जवाब देखें
मीडन अलोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.