2010-02-04 13 views
89

मैं "शामिल" केस को असंवेदनशील रूप से उपयोग करने का प्रयास कर रहा हूं। मैं निम्नलिखित stackoverflow सवाल पर समाधान का उपयोग करने की कोशिश की, लेकिन यह काम नहीं किया:मैं jQuery 1.8+ सहित jQuery को केस असंवेदनशील कैसे बना सकता हूं?

Is there a case insensitive jQuery :contains selector?

सुविधा के लिए, यहाँ समाधान की नकल की है:

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

यहाँ त्रुटि है :

Error: q is not a function 
Source File: /js/jquery-1.4.js?ver=1.4 
Line: 81 

यहाँ जहां मैं इसे का उपयोग कर रहा है:

$('input.preset').keyup(function() { 
    $(this).next().find("li").removeClass("bold"); 
    var theMatch = $(this).val(); 
    if (theMatch.length > 1){ 
     theMatch = "li:Contains('" + theMatch + "')"; 
     $(this).next().find(theMatch).addClass("bold"); 
    } 
    }); 

मूल केस संवेदी का मेरा उपयोग "शामिल है" में एक ही परिदृश्य किसी भी त्रुटि के बिना काम करता है। क्या किसी के पास कोई विचार है? यह सराहनीय है।

+0

मामले में किसी को भी रुचि है, मैं मैंने अपने [ब्लॉग पोस्ट] को अपडेट किया है (http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html) तीन अतिरिक्त चयनकर्ताओं में शामिल हैं: इसमें एक्स्टैक्ट', ':EEactactCase' और' : jQuery के सभी संस्करणों में अब काम करने के लिए Regex' चयनकर्ता शामिल हैं। – Mottie

+0

https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/, –

उत्तर

124

यही वह है जो मैं वर्तमान परियोजना में उपयोग कर रहा हूं, इसमें कोई समस्या नहीं है। यदि आप इस प्रारूप के साथ बेहतर भाग्य देखें:

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

jQuery 1.8 इस के लिए एपीआई बदल में, इस के jQuery 1.8+ संस्करण होगा:

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

You can test it out here। 1.8+ कस्टम चयनकर्ताओं, check out the Sizzle wiki here पर अधिक जानकारी के लिए।

+0

देखें आप एक जीवन बचतकर्ता हैं। धन्यवाद। – Matrym

+2

धन्यवाद! यह अभी भी jQuery 1.6.1 के साथ पूरी तरह से काम करता है। –

+3

कोई मौका आप इस बारे में बात कर सकते हैं कि यह वास्तव में क्या कर रहा है? –

42

यह ध्यान देने योग्य है कि उत्तर सही है लेकिन केवल :Contains को कवर करता है, और उपनाम :contains नहीं है जो अप्रत्याशित व्यवहार का कारण बन सकता है (या उन्नत अनुप्रयोगों के लिए डिज़ाइन द्वारा उपयोग किया जा सकता है जिसके लिए संवेदनशील और असंवेदनशील खोज दोनों की आवश्यकता होती है)।

यह अन्य नाम के लिए विस्तार की प्रतिलिपि द्वारा हल किया जा सकता है:

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

मुझे थोड़ी देर लिया कारण है कि यह मेरे लिए काम नहीं कर रहा था बाहर काम करने के।

+0

के साथ बुलाया गया है, मैंने उपरोक्त पर टिप्पणी की होगी, लेकिन स्पष्ट रूप से मैं सक्षम नहीं हूं। – Ellipsis

+5

मुझे यकीन नहीं है कि आप यहां क्या प्राप्त कर रहे हैं। यह 'शामिल है 'के अपेक्षित, दस्तावेज व्यवहार को ओवरराइड करता है। मुझे लगता है कि मूल ''शामिल' को छोड़ना और अपने नए चयनकर्ता 'आईकॉन्टेंस' को कॉल करना स्पष्ट है। –

+5

यह मेरी पोस्ट के बिंदु के बगल में है। एक वैकल्पिक चयनकर्ता बनाना निश्चित रूप से एक वैध विकल्प है, हालांकि मैं विस्तार से बता रहा था: इसमें शामिल हैं, लेकिन विस्तार करने की उपेक्षा: इसमें विभिन्न परिणाम मिलने पर उपयोगकर्ता भ्रम पैदा हो सकता है। – Ellipsis

24

मैं इस

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

की तरह कुछ करना और :contains अकेला छोड़ दो हैं ...

DEMO

तो क्यों jQuery इसका समर्थन नहीं करता यह पुस्तकालय है में ?! अगर यह इतना आसान ...

, क्योंकि Does your code pass the turkey code?

+2

बिल्कुल सही! धन्यवाद :) – masterchief

+1

यह स्वीकार्य उत्तर होना चाहिए। –

5

देर हो सकता है .... लेकिन

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

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

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

0

मैं अपने आप को मेरे दोस्तों को शामिल करने की अनुमति देंगे:

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

आप कोड बा खोजने के लिए इस लिंक का उपयोग करें कर सकते हैं:

$.expr[":"].containsNoCase = function (el, i, m) { 
    var search = m[3]; 
    if (!search) return false; 
    return eval("/" + search + "/i").test($(el).text()); 
}; 
0

मैं बस jQuery के मामले संवेदनशीलता पूरी तरह अनदेखी करने के लिए प्राप्त करने के लिए मैं कोड के नीचे क्या का उपयोग कर करना चाहते हैं कर रहा था अपने jQuery संस्करणों पर sed आप उपयोग करना चाहते हैं, मामले की संवेदनशीलता को अनदेखा करने https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/

इसके अलावा: शामिल हैं और कुछ खोज कर आप इस पर एक नज़र लेने के लिए चाहते हो सकता है: http://www.ultechspot.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly

संबंधित मुद्दे