উত্তর:
আমি jQuery 1.2 এর জন্য যা করতে পেরেছি তা হ'ল:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
এটি একটিতে jquery প্রসারিত করবে: নির্বাচককে সংবেদনশীল ক্ষেত্রে ধারণ করে, এতে: নির্বাচকটি অপরিবর্তিত থাকে।
সম্পাদনা করুন: jQuery 1.3 (ধন্যবাদ @ ব্যবহারকারী 95227) এর জন্য এবং পরে আপনার প্রয়োজন
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
সম্পাদনা করুন: দৃশ্যত ব্যবহার করে সরাসরি ডিওএম অ্যাক্সেস করা
(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 দ্বারা প্রাপ্ত প্যারামগুলি:
r = jQuery অ্যারের উপাদানগুলির যাচাই করা হচ্ছে। (যেমন: r.leth = উপাদানগুলির সংখ্যা)
i = অ্যারের আর এর মধ্যে বর্তমানে তদন্তের অধীনে উপাদানগুলির সূচক ।
a = উপাদান বর্তমানে তদন্তের অধীনে। নির্বাচিত বিবৃতি অবশ্যই এর ম্যাচের ফলাফলগুলিতে অন্তর্ভুক্ত করতে অবশ্যই সত্য ফিরে আসতে হবে।
মি [2] = নোডনাম বা * যা আমরা খুঁজছি (কোলনের বাম)।
মি [3] = পরম এতে প্রবেশ করেছে: নির্বাচক (প্যারাম)। সাধারণত হিসেবে একটি সূচক নম্বর, : n তম অফ-টাইপ (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 এর নেটিভ ' । কন্টেন্টস' এর সাথে কোনও হস্তক্ষেপ করবেন না ... আপনার পরে ডিফল্ট লাগতে পারে ... যদি এটির সাথে छेলা করা হয়, আপনি নিজেকে স্ট্যাকওভারফ্লোতে ফিরে দেখতে পাবেন ...
jQuery.expr[':'].contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
আপডেট কোডটি 1.3-এ দুর্দান্ত কাজ করে, তবে "উদাহরণস্বরূপ" আগের বর্ণের তুলনায় প্রথম অক্ষরে নিম্নতর হওয়া উচিত।
:contains
এবং :Contains
উভয়ই একই সাথে কাজ করতে পারে।
এইচটিএমএল কোড থেকে এর কেস সংবেদনশীলতা উপেক্ষা করে পাঠ্য খুঁজে পেতে ": অন্তর্ভুক্ত" ব্যবহার করতে নীচে উল্লেখ করুন,
$.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 সংস্করণের উপর ভিত্তি করে কেস উপেক্ষা করার কোডটি অনুসন্ধান করতে এই লিঙ্কটিও ব্যবহার করতে পারেন, jQuery তৈরি করুন: কেস-সংবেদনশীল রয়েছে
নিয়মিত এক্সপ্রেশন ব্যবহার করে একটি দ্রুত সংস্করণ।
$.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');
নতুন একটি ভেরিয়েবল আমি এটিকে সাবস্ট্রিংয়ের নাম দিয়েছি এবং কিছু উপাদানগুলির পাঠ্যে আপনি স্ট্রিংয়ের সন্ধান করতে চান। তারপরে জ্যাকুরি সিলেক্টর ব্যবহার করে আপনার প্রয়োজনীয় উপাদানগুলি নির্বাচন করুন যেমন আমার উদাহরণ $("elementsYouNeed")
এবং ফিল্টার করে .filter()
। এতে .filter()
প্রতিটি উপাদানকে $("elementsYouNeed")
ফাংশনের সাথে তুলনা করা হবে ।
.toLowerCase()
ফাংশনটিতে আমি উপাদান পাঠ্যের জন্যও সাবস্ট্রিং ব্যবহার করি যা সংবেদনশীল অবস্থা এড়াতে পারে এবং এতে কোনও সাবস্ট্রিং রয়েছে কিনা তা পরীক্ষা করতে পারে। এর পরে .filter()
পদ্ধতিটি ম্যাচের উপাদানগুলির একটি উপসেট থেকে একটি নতুন জিকুয়েরি অবজেক্ট তৈরি করে।
এখন আপনি ম্যাচঅবজেক্টগুলিতে ম্যাচের উপাদানগুলি পেতে পারেন এবং যা চান তা করতে পারেন।
var subString ="string you want to match".toLowerCase();
var matchObjects = $("elementsYouNeed").filter(function () {return $(this).text().toLowerCase().indexOf(subString) > -1;});