আমি কীভাবে 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 এর সমস্ত সংস্করণে কাজ করার জন্য আপডেট করেছি ।
মট্টি


আমি মনে করি। ফিল্টার () অন্য একটি ভাল উপায়। তথ্যসূত্র
劉鎮

উত্তর:


127

এটি আমি একটি বর্তমান প্রকল্পে ব্যবহার করছি, কোনও সমস্যা হয়নি। এই ফর্ম্যাটটি দিয়ে আপনার ভাগ্য ভাল কিনা তা দেখুন:

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

আপনি এটি এখানে পরীক্ষা করতে পারেন । 1.8+ কাস্টম নির্বাচনকারীদের আরও বিশদের জন্য সিজল উইকিটি এখানে দেখুন


তুমি একজন জীবন রক্ষাকারী. ধন্যবাদ
ম্যাট্রিম

4
এই সুযোগটি ঠিক কী করছে সে সম্পর্কে আপনি যে কোনও সুযোগের কথা বলতে পারেন?
আবে মাইস্লার 21

4
@ ক্লোভিসিক্স - শীর্ষস্থানীয়দের জন্য ধন্যবাদ, আমি এটি করার একটি 1.8+ পদ্ধতি সরবরাহ করেছি, আপনার কোনও সমস্যা আছে কিনা তা আমাকে জানান।
নিক ক্র্যাভার

4
এটি প্রতিস্থাপন করে না তা নোট করার জন্য: কেবলমাত্র অন্য একজন নির্বাচক যুক্ত করুন: ধারণ করে।
আলবানেক্স

4
নির্বাচককে icontains, বা অনুরূপ কিছু বলা উচিত ।
সেবাস্তিয়ান

43

এটি লক্ষণীয় যে উত্তরটি সঠিক তবে কেবল কভারগুলিই নয় :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; 
};

কেন এটি আমার পক্ষে কাজ করছে না তা নিয়ে কাজ করার জন্য আমাকে কিছুক্ষণ সময় নিয়েছে।


আমি উপরে এটি মন্তব্য করতে হবে, কিন্তু দৃশ্যত আমি সক্ষম নই।
এলিপসিস

4
আমি নিশ্চিত আপনি এখানে কি পাচ্ছেন। এটি প্রত্যাশিত, নথিভুক্ত আচরণকে ওভাররাইড করে :contains। আমি মনে করি যে আসলটি :containsএকা ছেড়ে আপনার নতুন নির্বাচককে কল করা আরও পরিষ্কার :icontains
জাস্টিন ফোর্স

4
এটি আমার পোস্টের পয়েন্টের পাশে। একটি বিকল্প নির্বাচক তৈরি করা অবশ্যই একটি বৈধ বিকল্প, তবে আমি উল্লেখ করছিলাম যে প্রসারিত: অন্তর্ভুক্ত রয়েছে, তবে প্রসারিত করতে অবহেলা করা: ধারণাগুলি ব্যবহারকারীর বিভ্রান্তির কারণ হতে পারে, যখন তারা বিভিন্ন ফলাফল দেয়।
এলিপসিস

4
তারপরে এই "গোটচা" ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ। :) তবুও, আমি মনে করি এটি উল্লেখ করা ভাল ধারণা যে এটি যখন কোনও ধ্বংসাত্মক, সমান্তরাল আচরণ তৈরির পক্ষে কম কাজ করা হয় তখন অন্তর্নির্মিত আচরণকে ওভাররাইড না করাই ভাল।
জাস্টিন ফোর্স

আমি এর জন্য পোস্ট করা কয়েকটি ভিন্ন সমাধান চেষ্টা করেছি এবং এটি শেষ পর্যন্ত কাজ করেছে। ধন্যবাদ
টেলর মিশেলগুলি

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 এর নেটিভ 'কন্টেন্টস' এর সাথে কোনও হস্তক্ষেপ করবেন না ... আপনার পরে ডিফল্টের প্রয়োজন হতে পারে ... যদি এটির সাথে টেম্পার করা হয় তবে আপনি নিজেকে স্ট্যাকওভারফ্লোতে ফিরে দেখতে পাবেন ...


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/using-jquery-search-html-text-and-show-or-hide- সেই অনুসারে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.