मैं jQuery के मामले को असंवेदनशील कैसे बना सकता हूं, जिसमें jQuery 1.8+ शामिल है?


91

मैं असंवेदनशील तरीके से "समाहित" मामले का उपयोग करने की कोशिश कर रहा हूं। मैंने निम्नलिखित स्टैक्वोवरफ़्लो प्रश्न पर समाधान का उपयोग करने की कोशिश की, लेकिन यह काम नहीं किया:

क्या कोई मामला असंवेदनशील है jQuery: चयनकर्ता शामिल हैं?

सुविधा के लिए, समाधान यहां कॉपी किया गया है:

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");
    }
  });

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


में मामला किसी को दिलचस्पी है, मैं अपने को नवीनीकृत किया है ब्लॉग पोस्ट पर तीन अतिरिक्त चयनकर्ताओं शामिल :containsExact, :containsExactCaseऔर :containsRegexअब jQuery के सभी संस्करणों में काम करने के लिए चयनकर्ताओं।
13


मुझे लगता है .filter () एक और अच्छा तरीका है। संदर्भ
劉鎮瑲

जवाबों:


127

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

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

JQuery 1.8 में इस परिवर्तित के लिए API, इस का jQuery 1.8+ संस्करण होगा:

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

आप इसका परीक्षण यहां कर सकते हैं । 1.8+ कस्टम चयनकर्ताओं के बारे में अधिक विस्तार के लिए, यहां Sizzle विकी देखें


आप एक जीवन रक्षक है। धन्यवाद।
मैट्रिअम

3
कोई भी मौका आप इस बारे में बात कर सकते हैं कि यह क्या कर रहा है?
अबे मिसेलर

4
@ क्लोविसिक्स - हेड्स के लिए धन्यवाद, मैंने ऐसा करने का एक 1.8+ तरीका प्रदान किया, मुझे बताएं कि क्या आपको कोई परेशानी है।
निक Craver

1
ध्यान दें कि यह प्रतिस्थापित नहीं करता है: इसमें केवल एक और चयनकर्ता शामिल है: इसमें शामिल हैं।
अल्बानक्स

3
चयनकर्ता को बुलाया जाना चाहिए icontains, या कुछ इसी तरह का।
सेबेस्टियन

43

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

यह उर्फ ​​के लिए extention डुप्लिकेट द्वारा हल किया जा सकता है:

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

मुझे काम करने के लिए कुछ समय लगा क्योंकि यह मेरे लिए काम नहीं कर रहा था।


मैंने ऊपर यह टिप्पणी की होगी, लेकिन जाहिर है कि मैं नहीं कर पा रहा हूं।
एलिप्सीस

5
मुझे यकीन नहीं है कि आप यहाँ क्या कर रहे हैं। यह अपेक्षित, प्रलेखित व्यवहार को ओवरराइड करता है :contains। मुझे लगता है कि मूल को :containsअकेले छोड़ना और अपने नए चयनकर्ता को कॉल करना स्पष्ट है :icontains
जस्टिन फोर्स

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

1
फिर इस "गोचा" को साझा करने के लिए धन्यवाद। :) फिर भी, मुझे लगता है कि यह उल्लेख करना एक अच्छा विचार है कि अंतर्निहित व्यवहार को ओवरराइड नहीं करना बेहतर है जब यह गैर-विनाशकारी, समानांतर व्यवहार बनाने के लिए कम काम है।
जस्टिन फोर्स

मैंने इसके लिए पोस्ट किए गए कुछ अलग समाधानों की कोशिश की और अंत में यह काम किया। धन्यवाद।
टेलर माइकल्स

27

मैं ऐसा कुछ करूंगा

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

और :containsअकेला छोड़ दो ...

डेमो

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

क्योंकि क्या आपका कोड टर्की कोड पास करता है?


6

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

मैं इस तरह से जाना पसंद करूँगा।

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

इस तरह, आप jQuery के NATIVE के साथ छेड़छाड़ नहीं करते हैं। '' अनुरक्षण ... आपको बाद में डिफ़ॉल्ट की आवश्यकता हो सकती है ... यदि छेड़छाड़ की जाती है, तो आप अपने आप को वापस ढेर में पा सकते हैं ...


0

मैं अपने दोस्तों को जोड़ने की अनुमति दूंगा:

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

0

मैं सिर्फ jQuery की केस संवेदनशीलता को अनदेखा करने में सक्षम था, जिसे मैं नीचे दिए गए कोड का उपयोग करके प्राप्त करना चाहता हूं:

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.