সংবেদনশীল jQuery একটি ক্ষেত্রে আছে: নির্বাচক রয়েছে?


145

এর কোনও সংবেদনশীল সংস্করণ রয়েছে: jQuery নির্বাচক রয়েছে বা আমার সমস্ত স্ট্রিমের উপর লুপিং করে এবং তার .text ()টিকে আমার স্ট্রিংয়ের সাথে তুলনা করে কাজটি ম্যানুয়ালি করা উচিত?


2
JQuery 8.1 এর জন্য + এই উত্তরটি
প্রবীণ

1
^ এটি ১.৮.১, ৮.১ নয়।
টাইলারহহ

এখানে ভাল উদাহরণ ।

উত্তর:


125

আমি 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;
    };
});

কেবলমাত্র লোকেরা জানাতে চেয়েছিলেন যে jQuery 1.3 এর জন্য @Pat এবং অন্যদের দ্বারা বর্ণিত সমাধানটি 1.4.3-র জন্যও কাজ করে।
জিম এদে

লিঙ্ক @ জনস প্রশ্ন / উত্তর যেহেতু এখানে লিঙ্ক মোছা হয়েছে: stackoverflow.com/questions/1407434/...
Mottie

এটি jQuery 1.8 এর জন্য কাজ করে না। আপডেট সংস্করণটির জন্য নীচে সিগুলজেএস-এর উত্তর দেখুন - stackoverflow.com/a/12113443/560114
ম্যাট ব্রাউন

105

এটিকে বিকল্পভাবে ক্ষেত্রে সংবেদনশীল হওয়ার জন্য: 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
আমার কাছে ওভাররাইট করার চেয়ে একটি নতুন ফাংশন যুক্ত করা সর্বোত্তম, আমি এখন এই বিকল্পটি ব্যবহার করি (
কবজির

22
এটি স্ট্যান্ডার্ড jquery লাইব্রেরিতে যুক্ত করা উচিত
ব্যবহারকারী 482594

41

JQuery 1.3 হিসাবে, এই পদ্ধতিটি অবচয় করা হয়েছে। এটি কাজ করতে এটি একটি ফাংশন হিসাবে সংজ্ঞায়িত করা প্রয়োজন:

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

38

যদি কেউ (আমার মত) আগ্রহী কি একটি এবং মি [3] গড় মধ্যে রয়েছে সংজ্ঞা।


কী / লেগেন্ড: নির্বাচক সংজ্ঞাগুলিতে ব্যবহারের জন্য jQuery দ্বারা প্রাপ্ত প্যারামগুলি:

r = jQuery অ্যারের উপাদানগুলির যাচাই করা হচ্ছে। (যেমন: r.leth = উপাদানগুলির সংখ্যা)

i = অ্যারের আর এর মধ্যে বর্তমানে তদন্তের অধীনে উপাদানগুলির সূচক ।

a = উপাদান বর্তমানে তদন্তের অধীনে। নির্বাচিত বিবৃতি অবশ্যই এর ম্যাচের ফলাফলগুলিতে অন্তর্ভুক্ত করতে অবশ্যই সত্য ফিরে আসতে হবে।

মি [2] = নোডনাম বা * যা আমরা খুঁজছি (কোলনের বাম)।

মি [3] = পরম এতে প্রবেশ করেছে: নির্বাচক (প্যারাম)। সাধারণত হিসেবে একটি সূচক নম্বর, : n তম অফ-টাইপ (5) , অথবা হিসাবে একটি স্ট্রিং, : রঙ (নীল)


31

JQuery 1.8 এ আপনাকে ব্যবহার করতে হবে

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

2
পুরোপুরি কাজ করেছেন, ধন্যবাদ! সবেমাত্র 1.8 এ আপডেট হয়েছে এবং এটি কাজ করা বন্ধ করে দিয়েছে।
আন্দ্রে

3
আপডেটের জন্য থেক্স। সবেমাত্র JQuery 1.8 এ আপডেট হয়েছে এবং এটি কাজ করা বন্ধ করে দিয়েছে
ওয়াসিম

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?')") ("স্টক" বা "স্টক" এর সাথে মিলছে তবে কেবল অনুচ্ছেদের শুরুতে (কোনও শীর্ষস্থানীয় সাদা অংশ উপেক্ষা করে)))

11

দেরি হতে পারে .... তবে,

আমি এই পথে যেতে পছন্দ করব ..

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

এইভাবে, আপনি jQuery এর নেটিভ 'কন্টেন্টস' এর সাথে কোনও হস্তক্ষেপ করবেন না ... আপনার পরে ডিফল্ট লাগতে পারে ... যদি এটির সাথে छेলা করা হয়, আপনি নিজেকে স্ট্যাকওভারফ্লোতে ফিরে দেখতে পাবেন ...


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

আপডেট কোডটি 1.3-এ দুর্দান্ত কাজ করে, তবে "উদাহরণস্বরূপ" আগের বর্ণের তুলনায় প্রথম অক্ষরে নিম্নতর হওয়া উচিত।


1
আমি মনে করি তিনি একটি পৃথক ফাংশন চেয়েছিলেন যাতে উভয় :containsএবং :Containsউভয়ই একই সাথে কাজ করতে পারে।
joshperry

"দ্য: নির্বাচকগুলি অপরিবর্তিত রয়েছে" "
হ্যারি বি

4

এইচটিএমএল কোড থেকে এর কেস সংবেদনশীলতা উপেক্ষা করে পাঠ্য খুঁজে পেতে ": অন্তর্ভুক্ত" ব্যবহার করতে নীচে উল্লেখ করুন,

 $.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 তৈরি করুন: কেস-সংবেদনশীল রয়েছে


2

নিয়মিত এক্সপ্রেশন ব্যবহার করে একটি দ্রুত সংস্করণ।

$.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());
};

চমৎকার কাজ! আপনাকে অনেক ধন্যবাদ. আমি বিশ্বাস করি যে এটি এই প্রশ্নের সেরা এবং সর্বাধিক যুগোপুষ্ট প্রতিক্রিয়া।
mavrosxristoforos

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');

0

নতুন একটি ভেরিয়েবল আমি এটিকে সাবস্ট্রিংয়ের নাম দিয়েছি এবং কিছু উপাদানগুলির পাঠ্যে আপনি স্ট্রিংয়ের সন্ধান করতে চান। তারপরে জ্যাকুরি সিলেক্টর ব্যবহার করে আপনার প্রয়োজনীয় উপাদানগুলি নির্বাচন করুন যেমন আমার উদাহরণ $("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;});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.