जवाबों:
मैंने 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;
};
संपादित करें: जाहिरा तौर पर उपयोग करके सीधे DOM तक पहुँचना
(a.textContent || a.innerText || "")
के बजाय
jQuery(a).text()
पिछली अभिव्यक्ति में इसकी गति काफी बढ़ जाती है इसलिए गति होने पर समस्या होने पर अपने जोखिम पर प्रयास करें। (देखें @ जॉन का सवाल )
नवीनतम संपादन: jQuery 1.8 के लिए यह होना चाहिए:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
इसे वैकल्पिक रूप से असंवेदनशील बनाने के लिए: 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] मतलब में शामिल परिभाषा।
कुंजी / कथा: चयनकर्ताओं की परिभाषाओं में उपयोग के लिए jQuery द्वारा उपलब्ध कराए गए Params:
तत्वों की r = jQuery सरणी की छानबीन की जा रही है। (उदाहरण: r.length = तत्वों की संख्या)
i = सरणी आर के भीतर वर्तमान में तत्व का सूचकांक ।
एक = तत्व वर्तमान में जांच के तहत। चयनकर्ता के कथन को उसके मिलान परिणामों में शामिल करने के लिए सही लौटना चाहिए।
मी [2] = नोडनेम या * कि हम (बृहदान्त्र के बाएं) की तलाश कर रहे हैं।
m [3] = परम: में चयनित: चयनकर्ता (परम)। आमतौर पर एक सूचकांक संख्या, जैसे : nth-of-type (5) , या एक स्ट्रिंग, जैसे : रंग (नीला) ।
JQuery 1.8 में आपको उपयोग करने की आवश्यकता होगी
jQuery.expr[":"].icontains = jQuery.expr.createPseudo(function (arg) {
return function (elem) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
एक भिन्नता जो थोड़ी तेज़ होती है और जो नियमित अभिव्यक्ति की अनुमति देती है:
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?')")
("स्टॉक" या "स्टॉक" से मेल खाता है, लेकिन केवल पैराग्राफ की शुरुआत में (किसी भी प्रमुख व्हाट्सएप को अनदेखा करते हुए)।देर हो सकती है .... लेकिन,
मैं इस तरह से जाना पसंद करूँगा।
$.extend($.expr[":"], {
"MyCaseInsensitiveContains": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
इस तरह, आप jQuery के NATIVE के साथ छेड़छाड़ नहीं करते हैं। '' अनुरक्षण '' ... आपको बाद में डिफ़ॉल्ट की आवश्यकता हो सकती है ... यदि छेड़छाड़ की जाती है, तो आप अपने आप को वापस ढेर में पा सकते हैं ...
jQuery.expr[':'].contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
अपडेट कोड 1.3 में बहुत अच्छा काम करता है, लेकिन पिछले उदाहरण के विपरीत पहले अक्षर पर "कम" होना चाहिए।
:contains
और :Contains
दोनों एक साथ काम करें।
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");
}
});
आप इस लिंक का उपयोग अपने jquery संस्करण के आधार पर कोड की अनदेखी के मामले को खोजने के लिए भी कर सकते हैं, Make jQuery: Case-Insensitive होता है
नियमित अभिव्यक्तियों का उपयोग करके एक तेज़ संस्करण।
$.expr[':'].icontains = function(el, i, m) { // checks for substring (case insensitive)
var search = m[3];
if (!search) return false;
var pattern = new RegExp(search, 'i');
return pattern.test($(el).text());
};
मुझे काम नहीं करने के साथ एक समान समस्या थी ...
// 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');
नया वैरिएबल मैं इसे नाम देता हूं सबस्ट्रिंग और उस स्ट्रिंग को डालें जिसे आप कुछ एलिमेंट्स टेक्स्ट में खोजना चाहते हैं। फिर Jquery चयनकर्ता उन चुनिंदा तत्वों का उपयोग करना चाहिए जिनकी आपको मेरे उदाहरण $("elementsYouNeed")
और फ़िल्टर द्वारा आवश्यकता है .filter()
। इसमें फ़ंक्शन के साथ .filter()
प्रत्येक तत्वों की तुलना की जाएगी $("elementsYouNeed")
।
.toLowerCase()
तत्व पाठ के लिए उपयोग होने वाले फ़ंक्शन में भी सबस्ट्रिंग, जो केस सेंसिटिव कंडीशन से बच सकता है और चेक कर सकता है कि उसमें सबस्ट्रिंग है या नहीं। उसके बाद .filter()
विधि मिलान तत्वों के एक सबसेट से एक नई jQuery वस्तु का निर्माण करती है।
अब आप matchObjects में मैच एलिमेंट्स पा सकते हैं और जो चाहें कर सकते हैं।
var subString ="string you want to match".toLowerCase();
var matchObjects = $("elementsYouNeed").filter(function () {return $(this).text().toLowerCase().indexOf(subString) > -1;});