क्या कुछ पाठ वाले तत्वों के लिए सीएसएस चयनकर्ता है?


510

मैं निम्नलिखित तालिका के लिए एक सीएसएस चयनकर्ता की तलाश कर रहा हूं:

Peter    | male    | 34
Susanne  | female  | 12

क्या "पुरुष" वाले सभी टीडी से मिलान करने के लिए कोई चयनकर्ता है?


1
समस्या यह है कि यह एक शानदार तरीके से लागू करने के लिए बहुत कठिन होगा।
सुश्री 02

7
एक XPath चयनकर्ता इसे .text () विधि के साथ कर सकता है (यदि आप जावास्क्रिप्ट निष्पादक का उपयोग नहीं करना चाहते हैं)।
djangofan

11
यहाँ आप xpath का उपयोग करके कैसे कर सकते हैं, इसकी एक छूट है: // h1 [पाठ () = 'सत्र'] और आप $ x लिखकर xpath का परीक्षण कर सकते हैं ("// h1 [पाठ () = 'सत्र']" ) सांत्वना में
VinnyG

1
यह इतना सुविधाजनक होगा। उदाहरण के लिए, एक टेबल सेल जिसमें एक चेकमार्क या स्ट्रिंग "हां", "पास", "ओके" आदि हो, हरे रंग का हो सकता है।
एंड्रियास रिब्रांडैंड

$xसवाल का जवाब देता है। मूल प्रश्न के लिए, $x("//td[text()='male']")ट्रिक
जिओ

जवाबों:


392

यदि मैं विनिर्देश को सही ढंग से पढ़ता हूं , तो नहीं।

आप एक तत्व पर मेल कर सकते हैं, तत्व में एक विशेषता का नाम, और एक तत्व में एक नामित विशेषता का मूल्य। मैं एक तत्व के भीतर सामग्री मिलान के लिए कुछ भी नहीं देखता, यद्यपि।


226
एक किनारे का मामला है :empty:।
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功 '

34
मेरे अपने प्रश्न का उत्तर देने के लिए: हाँ, यह आज भी सच है! सामग्री चयनकर्ताओं को पदावनत कर दिया गया था! CSS3 के बाद से कोई और सामग्री चयनकर्ता नहीं। ( w3.org/TR/css3-selectors/#selectors )
व्लाद

159

JQuery का उपयोग करना:

$('td:contains("male")')

7
इसके विपरीत की आवश्यकता समाप्त हुई, जो है: jQuery (तत्व) .not (": सम्‍मिलित ('स्ट्रिंग')")
Jazzy

308
सिवाय इसके कि सीएसएस नहीं है, कि जावास्क्रिप्ट है।
22

9
सहमत - इसीलिए मेरे जवाब में कहा गया कि मैं jQuery का उपयोग कर रहा था, CSS का नहीं। लेकिन मेरे जवाब का वह हिस्सा बाहर संपादित किया गया था। =)
1

17
लेकिन स्वयं शब्द पुरुष में भी 'पुरुष' शब्द नहीं है? क्या यह सिर्फ काम कर रहा है 'पहला पुरुष? बग यदि वे फिर से आदेश दिए जाते हैं तो क्या होगा?
माइकल डुरंट

5
@ मिचेल डुरंट: आप मज़ाक करते हैं, लेकिन क्रॉस-एलिमेंट स्ट्रिंग मिलान (जो एक ही तत्व के भीतर नियमित रूप से मेल खाने वाले मैच की तुलना में एक बड़ी समस्या है) वास्तव में सबसे बड़ा कारणों में से एक है: इसमें () गिरा दिया गया था।
BoltClock

158

ऐसा लगता है कि वे CSS3 कल्पना के लिए इसके बारे में सोच रहे थे, लेकिन इसने कटौती नहीं की

:contains()CSS3 चयनकर्ता http://www.w3.org/TR/css3-selectors/#content-selectors


9
Looks like they were thinking about it for the CSS3 spec but it didn't make the cut.और अच्छे कारण के लिए, यह स्टाइल, सामग्री, संरचना और व्यवहार को अलग करने के पूरे आधार का उल्लंघन करेगा।
सिंटेक

56
@Synetech यह वास्तव में सामग्री से स्टाइल को अलग करने में मदद कर सकता है, क्योंकि इसका मतलब है कि सामग्री को इसके ग्राहक के बारे में जानने की आवश्यकता नहीं है जो आधार स्टाइलिंग पर महत्वपूर्ण विचार करने जा रहा है। अभी हमारी HTML सामग्री आम तौर पर उन कक्षाओं को शामिल करके कसकर सीएसएस में जोड़ दी जाती है जिन्हें हम जानते हैं कि स्टाइलर की परवाह है। वे पहले से ही सामग्री में सीएसएस देने की ओर बढ़ रहे हैं, जैसा कि सीएसएस 3 में विशेषता मूल्य चयनकर्ताओं द्वारा दर्शाया गया है।
डैनीमिस्टर जूल

8
@Synetech और यह "व्यवहार" कैसा है, बिल्कुल? मेरे लिए यह प्रस्तुति का विषय है। यह कुछ भी नहीं करता है - यह कुछ प्रकार की सामग्री को एक निश्चित तरीके से प्रस्तुत करता है
बारबराक्वार्क

4
@ डैनीमिस्टर, ओह आपको मुझे समझाने की ज़रूरत नहीं है। कुछ साल और मैं इस कार्यक्षमता को देखने की कोशिश करते हुए खुद को यहाँ वापस पाता हूँ, और परेशान हूँ कि न केवल इसका अस्तित्व है, बल्कि इसे अस्वीकार कर दिया गया था। 😒 eBay ने अपने UI को बदल दिया और अपनी साइट का उपयोग करने के लिए बहुत मेहनत की। मैं इसे एक उपयोगकर्ता स्टाइलशीट के साथ ठीक करने की कोशिश कर रहा हूं, लेकिन उनका मार्कअप नीलामी और बीआईएन लिस्टिंग के बीच अंतर नहीं करता है, इसलिए किसी सूची में बोलियों की संख्या को उजागर करने का एकमात्र तरीका इसकी पाठ्य सामग्री द्वारा तत्व का मिलान करना है। किसी को यह समझाने में लग जाता है कि उनके लिए पहले उपयोग का मामला है।
सिनेटेक

8
सामग्री और स्टाइलिंग का अच्छा पृथक्करण सुनिश्चित करने के लिए, हमारे पास a: सम्‍मिलित () चयनकर्ता नहीं होगा। इसलिए, इसकी सामग्री के आधार पर एक सेल को स्टाइल करने के बजाय (उदाहरण के लिए, "ओपन", या "रिज़ॉल्यूशन" का एक "स्टेटस" कॉलम), हम प्रदर्शन और क्लास विशेषताओं दोनों में सामग्री की नकल करेंगे, और फिर उस पर चयन करेंगे । अति उत्कृष्ट!
जॉन क्लोसे

122

आपको डेटा विशेषताओं को उन पंक्तियों में जोड़ना होगा जिन्हें मूल्य या मान के data-genderसाथ बुलाया गया है और विशेषता चयनकर्ता का उपयोग करना है:malefemale

HTML:

<td data-gender="male">...</td>

सीएसएस:

td[data-gender="male"] { ... }

10
जावास्क्रिप्ट और सीएसएस के साथ कस्टम डेटा विशेषताओं का उपयोग करना पूरी तरह से ठीक है। डेटा विशेषताओं का उपयोग करते हुए एमडीएन
माइकल बेंजामिन

1
मैं सहमत हूं कि डेटा विशेषता यह है कि इसे कैसे संभाला जाना चाहिए, लेकिन, td.male की तरह एक CSS नियम अक्सर सेट अप करने के लिए बहुत आसान होता है, विशेष रूप से कोणीय के साथ जो कुछ ऐसा दिख सकता है: <td class = "{{person.gender}} ">
DJDaveMark

लिंग निश्चित रूप से एक विशिष्ट उदाहरण है जहां कक्षाएं काम करती हैं। लेकिन क्या होगा अगर डेटा सिर्फ maleया उससे अधिक विविध है female? तथ्य जो classअन्य वर्गों से भरा है, उनके आदेश की गारंटी नहीं है, अन्य वर्गों के नाम के साथ टकराव हो सकता है आदि classइस तरह के सामान के लिए एक बदतर जगह बनाता है। एक समर्पित data-*विशेषता आपके डेटा को उस सभी सामग्री से अलग करती है और विशेषता चयनकर्ताओं का उपयोग करके उस पर आंशिक मिलान आदि करना आसान बनाती है।
Stijn de Witt

एक कार्य कोड स्निपेट के साथ एक और उत्तर है जो समान तरीके से डेटा विशेषताओं का उपयोग करता है।
जोश हब्दास

65

वास्तव में यह क्यों लागू नहीं किया गया है इसके लिए एक बहुत ही वैचारिक आधार है। यह मूल रूप से 3 पहलुओं का एक संयोजन है:

  1. किसी तत्व की पाठ सामग्री प्रभावी रूप से उस तत्व का एक बच्चा है
  2. आप सीधे पाठ सामग्री को लक्षित नहीं कर सकते
  3. CSS चयनकर्ताओं के साथ आरोहण की अनुमति नहीं देता है

इन 3 का एक साथ मतलब यह है कि जब तक आपके पास पाठ सामग्री होती है तब तक आप किसी भी तत्व से नहीं जुड़ सकते हैं, और आप वर्तमान पाठ को स्टाइल नहीं कर सकते। यह संभावना के रूप में महत्वपूर्ण है क्योंकि केवल संदर्भ और एसएएक्स शैली पार्सिंग के एक विलक्षण ट्रैकिंग के लिए अनुमति देता है। अन्य कुल्हाड़ियों को शामिल करने या अन्य चयनकर्ताओं को अधिक जटिल ट्रैवर्सल या इसी तरह के समाधानों की आवश्यकता होती है जो सीएसएस के आवेदन को डोम से बहुत जटिल करते हैं।


4
यह सच है। यह वही है जो XPath के लिए है। यदि आप JS / jQuery या एक पार्सिंग लाइब्रेरी (जैसा कि CSS-only के विपरीत है) में चयनकर्ता निष्पादित कर सकते हैं, तो XPath के text()फ़ंक्शन का उपयोग करना संभव होगा ।
मार्क थॉमस

यह सामग्री के बारे में एक अच्छा बिंदु है । लेकिन मैं कैसे कामना करता हूं कि आप :contains(<sub-selector>)ऐसे तत्वों का चयन कर सकते हैं जिनमें अन्य विशिष्ट तत्व शामिल हैं। div:contains(div[id~="bannerAd"])विज्ञापन से छुटकारा पाना पसंद है और यह कंटेनर है।
लॉरेंस डोल

27

आप सामग्री को डेटा विशेषता के रूप में सेट कर सकते हैं और फिर विशेषता चयनकर्ताओं का उपयोग कर सकते हैं , जैसा कि यहाँ दिखाया गया है:

/* Select every cell containing word "male" */
td[data-content="male"] {
  color: red;
}

/* Select every cell starting on "p" case insensitive */
td[data-content^="p" i] {
  color: blue;
}

/* Select every cell containing "4" */
td[data-content*="4"] {
  color: green;
}
<table>
  <tr>
    <td data-content="Peter">Peter</td>
    <td data-content="male">male</td>
    <td data-content="34">34</td>
  </tr>
  <tr>
    <td data-conten="Susanne">Susanne</td>
    <td data-content="female">female</td>
    <td data-content="14">14</td>
  </tr>
</table>

आप डेटा-कंटेंट विशेषताओं को आसानी से सेट करने के लिए jQuery का उपयोग कर सकते हैं:

$(function(){
  $("td").each(function(){
    var $this = $(this);
    $this.attr("data-content", $this.text());
  });
});

3
ध्यान दें कि .text()और .textContentबहुत भारी हैं, जब संभव हो तो लंबी सूची या बड़े ग्रंथों में उनसे बचने की कोशिश करें। .html()और .innerHTMLतेज हैं।
ओरिदम

@ जोशदास आप अपने बदलाव का एक jsbin / jsfiddle उदाहरण बना सकते हैं?
बुक्सि

1
यदि आप jQuery का उपयोग करने जा रहे हैं, तो चयनकर्ता का उपयोग करें:$("td:contains(male)")
huwiler

यदि सामग्री उपयोगकर्ता ( contenteditable='true'- मेरा मामला) द्वारा संपादन योग्य है , तो data-contentपृष्ठ प्रदान करने से पहले विशेषता के मूल्य को सेट करना पर्याप्त नहीं है । इसे लगातार अपडेट करना होगा। यहाँ मैं क्या उपयोग करता हूँ:<td onkeypress="event.target.setAttribute('data-content', event.target.textContent);">
कार्म

13

जैसा कि CSS में इस सुविधा का अभाव है, आपको सामग्री द्वारा जावास्क्रिप्ट का उपयोग शैली की कोशिकाओं में करना होगा। XPath के उदाहरण के लिए contains:

var elms = document.evaluate( "//td[contains(., 'male')]", node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null )

फिर परिणाम का उपयोग इस तरह करें:

for ( var i=0 ; i < elms.snapshotLength; i++ ){
   elms.snapshotItem(i).style.background = "pink";
}

https://jsfiddle.net/gaby_de_wilde/o7bka7Ls/9/


यह जावास्क्रिप्ट है, यह प्रश्न से कैसे संबंधित है?
रुब77

3
जैसा कि आप css में सामग्री द्वारा चयन नहीं कर सकते, आपको ऐसा करने के लिए js का उपयोग करना होगा। जब आप सही हैं, जहाँ आप इंगित करते हैं कि यह css नहीं है, तो डेटा विशेषता का उपयोग सामग्री द्वारा नहीं किया जा रहा है। हम केवल अनुमान लगा सकते हैं कि पाठक सामग्री के आधार पर कोशिकाओं का चयन क्यों करना चाहता है, HTML में उसकी किस तरह की पहुंच है, कितने मेल खाते हैं, टेबल कितनी बड़ी है आदि
user40521

7

मुझे डर है कि यह संभव नहीं है, क्योंकि सामग्री कोई विशेषता नहीं है और न ही यह एक छद्म वर्ग के माध्यम से सुलभ है। CSS3 चयनकर्ताओं की पूरी सूची CSS3 के विनिर्देशन में पाई जा सकती है ।


4

जो लोग सेलेनियम सीएसएस पाठ चयन करने के लिए देख रहे हैं, उनके लिए यह स्क्रिप्ट कुछ काम की हो सकती है।

चाल उस तत्व के माता-पिता का चयन करना है जिसे आप खोज रहे हैं, और फिर उस बच्चे की खोज करें जिसमें पाठ है:

public static IWebElement FindByText(this IWebDriver driver, string text)
{
    var list = driver.FindElement(By.CssSelector("#RiskAddressList"));
    var element = ((IJavaScriptExecutor)driver).ExecuteScript(string.Format(" var x = $(arguments[0]).find(\":contains('{0}')\"); return x;", text), list);
    return ((System.Collections.ObjectModel.ReadOnlyCollection<IWebElement>)element)[0];
}

यदि मेरे मामले में यह हमेशा एक तत्व है, तो यह पहला तत्व लौटाएगा।


TD:contains('male')यदि आप सेलेनियम का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं : यदि आप कक्षाओं को जोड़ने के लिए स्रोत को अपडेट नहीं कर सकते हैं तो केवल इसका उपयोग करें। जैसे अगर आप विरासत कोड का परीक्षण कर रहे हैं या आपकी कंपनी आपको देवों (eurgh!) से बात करने नहीं देगी क्योंकि आपके परीक्षण भंगुर होंगे और अगर कोई पाठ को बाद में बदल देता है masculineया भाषा बदल देता है तो वह टूट जाएगा । SauceLabs डॉक्स containsयहां ( saucelabs.com/resources/articles/selenium-tips-css-selectors ) + cc @matas vaitkevicius के उपयोग से पता चलता है कि मैंने कुछ याद किया है?
स्नोडकोड

3

मैं डेटा विशेषता (वॉयेजर के उत्तर) से सहमत हूं कि इसे कैसे संभाला जाना चाहिए, लेकिन, सीएसएस नियम जैसे:

td.male { color: blue; }
td.female { color: pink; }

अक्सर सेट अप करने के लिए बहुत आसान हो सकता है, विशेष रूप से क्लाइंट-साइड लिबास जैसे कि एंगुलरज जैसे कि जितना सरल हो सकता है:

<td class="{{person.gender}}">

बस सुनिश्चित करें कि सामग्री केवल एक शब्द है! या आप अलग-अलग CSS वर्ग नामों के साथ मैप भी कर सकते हैं:

<td ng-class="{'masculine': person.isMale(), 'feminine': person.isFemale()}">

पूर्णता के लिए, यहां डेटा विशेषता दृष्टिकोण है:

<td data-gender="{{person.gender}}">

टेम्पलेट बाइंडिंग एक महान समाधान है। लेकिन मार्कअप संरचना के आधार पर वर्ग नाम बनाने के लिए यह थोड़ा सा लगता है (हालांकि यह बहुत अधिक है जो BEM व्यवहार में करता है)।
जोश हबडास

2

data-*विशेषता का उपयोग करने के बारे में @ वॉयेजर का जवाब (उदाहरण 2017 के अनुसार data-gender="female|male"सबसे प्रभावी और मानकों का अनुपालन है :

[data-gender='male'] {background-color: #000; color: #ccc;}

बहुत अधिक लक्ष्यों को प्राप्त किया जा सकता है क्योंकि पाठ के चारों ओर कुछ सीमित सीमित चयनकर्ता होते हैं। :: पहले अक्षर एक है छद्म तत्व है कि एक तत्व के पहले अक्षर के लिए सीमित स्टाइल आवेदन कर सकते हैं। स्पष्ट रूप से एक तत्व की पहली पंक्ति (जैसे कि एक पैरा) का चयन करने के अलावा एक :: पहली पंक्ति का छद्म तत्व भी है, यह स्पष्ट है कि सीएसएस का उपयोग इस मौजूदा क्षमता को विस्तारित करने के लिए किया जा सकता है एक टेक्स्ट के विशिष्ट पहलुओं को स्टाइल करने के लिए ।

जब तक इस तरह के वकालत सफल होता है और दूसरी सबसे बड़ी चीज जब लागू करने के लिए है मेरा सुझाव सकता है कार्यान्वित किया जाता है explode/ splitएक अंतरिक्ष deliminator, उत्पादन एक के प्रत्येक व्यक्ति के शब्द के अंदर का उपयोग कर शब्द spanतत्व और फिर अगर शब्द / स्टाइल लक्ष्य उम्मीद के मुताबिक है के साथ संयोजन में उपयोग : n वें चयनकर्ताओं :

$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
 echo '<span>'.$value1.'</span>;
}

वरना उम्मीद के मुताबिक नहीं तो करने के लिए, फिर से, उपयोग के बारे में उपयोग नाविक के जवाब data-*विशेषता। PHP का उपयोग कर एक उदाहरण:

$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
 echo '<span data-word="'.$value1.'">'.$value1.'</span>;
}

2

यदि आप Chimp / Webdriver.io का उपयोग कर रहे हैं , तो वे CSS युक्ति की तुलना में बहुत अधिक CSS चयनकर्ताओं का समर्थन करते हैं

यह, उदाहरण के लिए, पहले एंकर पर क्लिक करें जिसमें "बुरा भालू" शब्द शामिल हैं:

browser.click("a*=Bad Bear");

1

यहां अधिकांश उत्तर वैकल्पिक डेटा को शामिल करने के लिए HTML कोड लिखने के तरीके के विकल्प की पेशकश करने का प्रयास करते हैं क्योंकि कम से कम CSS3 तक आप आंशिक आंतरिक पाठ द्वारा एक तत्व का चयन नहीं कर सकते हैं। लेकिन यह किया जा सकता है, आपको बस थोड़ा सा वैनिला जावास्क्रिप्ट जोड़ने की जरूरत है, क्योंकि महिला में भी पुरुष शामिल हैं, इसे चुना जाएगा:

      cells = document.querySelectorAll('td');
    	console.log(cells);
      [].forEach.call(cells, function (el) {
    	if(el.innerText.indexOf("male") !== -1){
    	//el.click(); click or any other option
    	console.log(el)
    	}
    });
 <table>
      <tr>
        <td>Peter</td>
        <td>male</td>
        <td>34</td>
      </tr>
      <tr>
        <td>Susanne</td>
        <td>female</td>
        <td>14</td>
      </tr>
    </table>

<table>
  <tr>
    <td data-content="Peter">Peter</td>
    <td data-content="male">male</td>
    <td data-content="34">34</td>
  </tr>
  <tr>
    <td data-conten="Susanne">Susanne</td>
    <td data-content="female">female</td>
    <td data-content="14">14</td>
  </tr>
</table>

1

यदि आप जावास्क्रिप्ट या jquery का उपयोग नहीं करना चाहते हैं तो मुझे आपकी सबसे अच्छी शर्त होने का विकल्प मिलता है।

उदाहरण के लिए तैयार शब्द के साथ सभी तालिका कोशिकाओं को स्टाइल करने के लिए, HTML में ऐसा करें:

 <td status*="ready">Ready</td>

फिर सीएसएस में:

td[status*="ready"] {
        color: red;
    }

0

तुम भी और शैली तालिका कोशिकाओं के contentसाथ उपयोग कर सकते attr()हैं ::not :empty

th::after { content: attr(data-value) }
td::after { content: attr(data-value) }
td[data-value]:not(:empty) {
  color: fuchsia;
}
<table>
  <tr>
    <th data-value="Peter"></th>
    <td data-value="male">&#x0200B;</td>
    <td data-value="34"></td>
  </tr>
  <tr>
    <th data-value="Susanne"></th>
    <td data-value="female"></td>
    <td data-value="12"></td>
  </tr>
  <tr>
    <th data-value="Lucas"></th>
    <td data-value="male">&#x0200B;</td>
    <td data-value="41"></td>
  </tr>
</table>

ZeroWidthSpaceरंग बदलने के लिए A का उपयोग किया जाता है और वेनिला जावास्क्रिप्ट का उपयोग करके जोड़ा जा सकता है:

const hombres = document.querySelectorAll('td[data-value="male"]');
hombres.forEach(hombre => hombre.innerHTML = '&#x0200B;');

हालाँकि ऐसा करने से <td>अंतिम छोर टैग छोड़ा जा सकता है, जिससे इसे गैर-खाली माना जा सकता है।


0

यदि आप स्वयं DOM नहीं बनाते (उदाहरण के लिए एकस्क्रिप्ट में) तो आप शुद्ध JS के साथ निम्न कार्य कर सकते हैं:

for ( td of document.querySelectorAll('td') ) {
  console.debug("text:", td, td.innerText)
  td.setAttribute('text', td.innerText)
}
for ( td of document.querySelectorAll('td[text="male"]') )
  console.debug("male:", td, td.innerText)
<table>
  <tr>
    <td>Peter</td>
    <td>male</td>
    <td>34</td>
  </tr>
  <tr>
    <td>Susanne</td>
    <td>female</td>
    <td>12</td>
  </tr>
</table>

कंसोल आउटपुट

text: <td> Peter
text: <td> male
text: <td> 34
text: <td> Susanne
text: <td> female
text: <td> 12
male: <td text="male"> male

-2

इस तरह छोटे फिल्टर विजेट करना:

    var searchField = document.querySelector('HOWEVER_YOU_MAY_FIND_IT')
    var faqEntries = document.querySelectorAll('WRAPPING_ELEMENT .entry')

    searchField.addEventListener('keyup', function (evt) {
        var testValue = evt.target.value.toLocaleLowerCase();
        var regExp = RegExp(testValue);

        faqEntries.forEach(function (entry) {
            var text = entry.textContent.toLocaleLowerCase();

            entry.classList.remove('show', 'hide');

            if (regExp.test(text)) {
                entry.classList.add('show')
            } else {
                entry.classList.add('hide')
            }
        })
    })

-2

इस प्रश्न का सिंटैक्स रोबोट फ्रेमवर्क सिंटैक्स की तरह दिखता है। इस मामले में, हालांकि कोई सीएसएस चयनकर्ता नहीं है जिसे आप शामिल करने के लिए उपयोग कर सकते हैं, एक सेलेनियमलिफ्ट कीवर्ड है जिसे आप इसके बजाय उपयोग कर सकते हैं। प्रतीक्षा तत्व तक शामिल हैं

उदाहरण:

Wait Until Element Contains  | ${element} | ${contains}
Wait Until Element Contains  |  td | male
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.