2008-10-09 9 views
130

क्या :contains jQuery चयनकर्ता का कोई मामला असंवेदनशील संस्करण है या क्या मुझे सभी तत्वों पर लूपिंग करके मैन्युअल रूप से काम करना चाहिए और अपनी स्ट्रिंग में अपनी .text() की तुलना करना चाहिए?क्या कोई मामला असंवेदनशील jQuery है: चयनकर्ता शामिल है?

+2

jQuery 8.1 के लिए बिना + यह जांचें [उत्तर] (http://stackoverflow.com/a/2196683/1671639) – Praveen

+1

^यह 1.8.1 है, 8.1 नहीं। – TylerH

उत्तर

116

क्या मैं jQuery 1.2 के लिए कर रही है समाप्त हो गया है:

jQuery.extend(
    jQuery.expr[':'], { 
     Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
}); 

यह एक है करने के लिए jQuery का विस्तार होगा: चयनकर्ता मामले असंवेदनशील है कि शामिल हैं,: चयनकर्ता अपरिवर्तित रहता है में शामिल है।

संपादित करें: jQuery 1.3 (धन्यवाद @ user95227) और बाद के लिए आप की जरूरत

jQuery.expr[':'].Contains = function(a,i,m){ 
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0; 
}; 

संपादित करें: जाहिर

(a.textContent || a.innerText || "") 
बजाय

jQuery(a).text() 
का उपयोग करके सीधे डोम तक पहुँचने

पिछली अभिव्यक्ति में इसे काफी तेज करता है इसलिए अपने जोखिम पर आज़माएं अगर गति एक मुद्दा है। (देखें @John के question)

नवीनतम संपादित करें: jQuery 1.8 के लिए यह होना चाहिए:

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) { 
    return function(elem) { 
     return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 
    }; 
}); 
+0

बस लोगों को यह बताना चाहता था कि jQuery 1.3 के लिए @Pat और दूसरों द्वारा वर्णित समाधान 1.4.3 के लिए भी काम करता है। –

+0

लिंक के बाद से जॉन के प्रश्न/उत्तर से लिंक हटा दिया गया था: http://stackoverflow.com/questions/1407434/is-there-any-way-to-speed-up-this-solution-for-a-case -insensitive-jquery-contai – Mottie

+0

यह jQuery 1.8 के लिए काम नहीं करता है। एक अद्यतन संस्करण के लिए नीचे seagullJS का उत्तर देखें - http://stackoverflow.com/a/12113443/560114 –

34

अगर किसी (मेरे जैसे) रुचि रखता है क्या करते एक और मीटर [3] में मतलब में परिभाषा शामिल है।


कुंजी/LEGEND: पैरामीटर चयनकर्ता निर्धारित करने में उपयोग के लिए jQuery द्वारा उपलब्ध कराए:

आर तत्वों की = jQuery सरणी छानबीन की जा रही। (जैसे: r.length = तत्वों की संख्या)

मैं = तत्व के सूचकांक वर्तमान में जांच के दायरे में, भीतर सरणी आर

= वर्तमान में जांच के तहत तत्व। चयनकर्ता कथन को इसके मिलान किए गए परिणामों में शामिल करने के लिए सच होना चाहिए।

मीटर [2] = नोडनाम या * जिसे हम ढूंढ रहे हैं (कोलन के बाएं)।

मीटर [3] = पैरा में शामिल: चयनकर्ता (पैरा)। आम तौर पर में: इंडेक्स संख्या: nth-of-type (5), या में एक स्ट्रिंग: रंग (नीला)

39

jQuery 1.3 के रूप में, यह विधि बहिष्कृत है।यह काम करने के लिए प्राप्त करने के लिए एक समारोह के रूप में परिभाषित किया जा करने की जरूरत है:

jQuery.expr[':'].Contains = function(a,i,m){ 
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0; 
}; 
6
jQuery.expr[':'].contains = function(a,i,m){ 
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0; 
}; 

अद्यतन कोड 1.3 में अच्छा काम करता है, लेकिन "शामिल है" पिछले उदाहरण के विपरीत पहले अक्षर पर लोअर केस होना चाहिए।

+1

मुझे लगता है कि वह एक अलग कार्य चाहता था ताकि दोनों 'इसमें शामिल हैं' और 'शामिल हैं' दोनों एक साथ काम करेंगे। – joshperry

+0

": चयनकर्ता अपरिवर्तित बनी हुई है।" –

94

यह वैकल्पिक रूप से केस संवेदी बनाने के लिए: http://bugs.jquery.com/ticket/278

$.extend($.expr[':'], { 
    'containsi': function(elem, i, match, array) 
    { 
    return (elem.textContent || elem.innerText || '').toLowerCase() 
    .indexOf((match[3] || "").toLowerCase()) >= 0; 
    } 
}); 

तो :containsi के बजाय :contains

+3

एक नया फ़ंक्शन जोड़ना मुझे ओवरराइट करने से सबसे अच्छा है, अब मैं इस विकल्प का उपयोग करता हूं (एक आकर्षण की तरह काम करता है) –

+20

इसे मानक jquery लाइब्रेरी में जोड़ा जाना चाहिए – user482594

15

एक बदलाव है कि थोड़ा तेज प्रदर्शन करने के लिए लगता है और वह भी की अनुमति देता है नियमित अभिव्यक्ति उपयोग करते हैं:

jQuery.extend (
    jQuery.expr[':'].containsCI = function (a, i, m) { 
     //-- faster than jQuery(a).text() 
     var sText = (a.textContent || a.innerText || "");  
     var zRegExp = new RegExp (m[3], 'i'); 
     return zRegExp.test (sText); 
    } 
); 



इतना ही नहीं केस-संवेदी है, लेकिन यह जैसे शक्तिशाली खोज की अनुमति देता है:

  • $("p:containsCI('\\bup\\b')") (मिलान "ऊपर" या "ऊपर", लेकिन "ऊपरी" "वेकअप", आदि)
  • $("p:containsCI('(?:Red|Blue) state')") (मेल खाता है "लाल राज्य" या "नीले राज्य", लेकिन "राज्य अप", आदि)
  • $("p:containsCI('^\\s*Stocks?')") ("स्टॉक" या "स्टॉक" मेल है, लेकिन केवल के शुरू में नहीं अनुच्छेद (किसी भी अग्रणी सफेद जगह को अनदेखा कर रहा है)।
28

jQuery 1.8 में आप ..

मैं इस तरह से जाना पसंद करते हैं

jQuery.expr[":"].icontains = jQuery.expr.createPseudo(function (arg) {                                         
    return function (elem) {                
     return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;   
    };                     
}); 
+1

पूरी तरह से काम किया, धन्यवाद! बस 1.8 पर अपडेट किया गया और यह काम करना बंद कर दिया। अद्यतन के लिए – Andreas

+2

thanx। बस JQuery 1.8 में अपडेट किया गया और यह काम करना बंद कर दिया – Wasim

9

उपयोग करने के लिए देर से हो सकता है की आवश्यकता होगी .... लेकिन,

$.extend($.expr[":"], { 
"MyCaseInsensitiveContains": function(elem, i, match, array) { 
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; 
} 
}); 

इस तरह, आप jQuery के नेटिव 'के साथ छेड़छाड़ नहीं करते हैं। ... आपको डिफ़ॉल्ट की आवश्यकता हो सकती है बाद में ... अगर साथ छेड़छाड़ की, आप अपने आप को वापस Stackoverflow ... उपयोग करने के लिए नीचे दिए गए कोड

4

उपयोग करने के लिए मिल सकती है ": शामिल है" एक HTML कोड से उसका केस संवेदनशीलता अनदेखी पाठ को खोजने के लिए,

$.expr[":"].contains = $.expr.createPseudo(function(arg) { 
      return function(elem) { 
       return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 
      }; 
     }); 
     $("#searchTextBox").keypress(function() { 
      if($("#searchTextBox").val().length > 0){ 
      $(".rows").css("display","none"); 
      var userSerarchField = $("#searchTextBox").val(); 
      $(".rows:contains('"+ userSerarchField +"')").css("display","block"); 
      } else { 
      $(".rows").css("display","block"); 
      }    
     }); 

आप इस पर अधिक जानकारी प्राप्त करने के लिए इस लिंक का उपयोग कर सकता है, Use jQuery to search HTML text and show or hide accordingly

तुम भी इस लिंक का उपयोग कर सकते हैं अपने jQuery संस्करण के आधार पर कोड igonring मामले को खोजने के लिए, Make jQuery :contains Case-Insensitive

0

मुझे निम्नलिखित काम करने के साथ एक ही समस्या थी ...

// This doesn't catch flac or Flac 
$('div.story span.Quality:not(:contains("FLAC"))').css("background-color", 'yellow'); 

यह काम करता है और एक विस्तार

$('div.story span.Quality:not([data*="flac"])').css("background-color", 'yellow'); 

यह भी काम करता है, लेकिन शायद "मैन्युअल रूप से पाशन" श्रेणी में आता है के लिए की जरूरत ....

$('div.story span.Quality').contents().filter(function() 
{ 
    return !/flac/i.test(this.nodeValue); 
}).parent().css("background-color", 'yellow'); 
संबंधित मुद्दे