jQuery নির্বাচনকারী নিয়মিত প্রকাশ


580

আমি উইকিডকার্ড বা নিয়মিত এক্সপ্রেশন (সঠিক পরিভাষা সম্পর্কে নিশ্চিত নয়) ব্যবহার করে জকিউয়ারি সিলেক্টরের সাথে ডকুমেন্টেশনের পরে আছি।

আমি নিজে এটি সন্ধান করেছি কিন্তু সিনট্যাক্স এবং কীভাবে এটি ব্যবহার করব সে সম্পর্কে তথ্য খুঁজে পেতে সক্ষম হয়েছি। সিনট্যাক্সের জন্য ডকুমেন্টেশন কোথায় আছে কেউ জানেন?

সম্পাদনা: অ্যাট্রিবিউট ফিল্টারগুলি আপনাকে কোনও অ্যাট্রিবিউটের মানের ধরণের উপর নির্ভর করে নির্বাচন করতে দেয় allow

উত্তর:


339

জেমস প্যাডলসী একটি দুর্দান্ত ফিল্টার তৈরি করেছেন যা নির্বাচনের জন্য রেজেক্সকে ব্যবহার করতে দেয়।

বলুন আপনার নিম্নলিখিত রয়েছে div:

<div class="asdf">

প্যাডলসির :regexফিল্টার এটি এর মতো চয়ন করতে পারে:

$("div:regex(class, .*sd.*)")

এছাড়াও, নির্বাচকদের সরকারী ডকুমেন্টেশন চেক করুন ।


3
ঠিক আছে. আমি সেখানে ছিলাম তবে আমি যা খুঁজছিলাম তার নাম সত্যিই জানতাম না। Ive অন্য চেহারা ছিল এবং বৈশিষ্ট্য ফিল্টার ব্যবহার করে আমি পরে ছিল।
জোয়েল কানিংহাম

@ প্যাডলসির দ্বারা রেগেক্স নির্বাচক দুর্দান্ত কাজ করে। এখানে একটি উদাহরণ রয়েছে যেখানে আপনি পাঠ্য, ফাইল এবং চেকবক্স ইনপুট ক্ষেত্রগুলি বা পাঠ্যপাঠগুলি এর মাধ্যমে পুনরাবৃত্তি করতে পারবেন: $ j ('ইনপুট: রেজেক্স (প্রকার, পাঠ্য | ফাইল | চেকবক্স)), টেক্সারিয়া') প্রতিটি (ফাংশন (সূচী) {// ...});
ম্যাট সেটার

13
নিকফের নীচের উত্তরটি গ্রহণযোগ্য হওয়া উচিত। আপনি যদি এই উত্তরটি পড়ছেন তবে অবশ্যই এটি পড়তে ভুলবেন না!
কোয়ান্টিন স্কাউসেন

5
আমি ত্রুটি পাচ্ছি: সিনট্যাক্স ত্রুটি, অচেনা এক্সপ্রেশন: অসমর্থিত ছদ্ম:
রিজেক্স

2
-1। এটি কার্যকর করার কোডটি উত্তরের অন্তর্ভুক্ত নয় এবং পচা লিঙ্কটি সংবেদনশীল। এটা তাদের ধারণকারী রেগুলার এক্সপ্রেশনের থেকে কমা (প্রতিস্থাপন দ্বারা মীমাংসিত ড্রপ হবে - উপরন্তু, আমি দুই বাগ কোড পরীক্ষা যখন পাওয়া matchParams.join('')সঙ্গে matchParams.join(',')), এবং কোন প্যাটার্ন যে ম্যাচ 'undefined'বা 'null'ম্যাচ হবে undefinedএবং nullযথাক্রমে। এই দ্বিতীয় বাগটি পরীক্ষিত মানটি !== undefinedএবং !== nullপ্রথমটি পরীক্ষা করে সমাধান করা যেতে পারে । যেভাবেই হোক না কেন, কোনও ফাংশনটিতে প্রবেশ .filter()করা সহজ এবং আমার কাছে আরও পরিষ্কার / আরও পঠনযোগ্য মনে হয়।
জেমস টি

732

আপনি filterআরও জটিল রেগেক্স ম্যাচ প্রয়োগ করতে ফাংশনটি ব্যবহার করতে পারেন ।

এখানে একটি উদাহরণ যা কেবল প্রথম তিনটি ভাগের সাথে মিলবে:

$('div')
  .filter(function() {
    return this.id.match(/abc+d/);
  })
  .html("Matched!");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="abcd">Not matched</div>
<div id="abccd">Not matched</div>
<div id="abcccd">Not matched</div>
<div id="abd">Not matched</div>


ম্যাচের জায়গায় ভেরিয়েবলগুলি কীভাবে ব্যবহার করবেন (/ abc + d /); ?
সাসি বর্ণ কুমার

2
@ সসিভর্ণকুমার এই প্রশ্নের উত্তর এখানে
ফিলিপ মাইয়া

283

এগুলি সহায়ক হতে পারে।

যদি আপনি এটি ধারণ করে সন্ধান করছেন তবে এটি এমন হবে

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

আপনি যদি স্টার্টস উইথ দ্বারা সন্ধান করে থাকেন তবে এটি এমনই হবে

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

যদি আপনি এন্ডস উইথ সন্ধান করে থাকেন তবে এটি এমনই হবে

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

যদি আপনি এমন উপাদান নির্বাচন করতে চান যা কোন আইডি প্রদত্ত স্ট্রিং নয়

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

আপনি যদি এমন উপাদান নির্বাচন করতে চান যা নামটিতে একটি প্রদত্ত শব্দ রয়েছে, স্পেস দ্বারা সীমিত ited

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

যদি আপনি এমন উপাদানগুলি নির্বাচন করতে চান যা কোনও আইডি একটি প্রদত্ত স্ট্রিংয়ের সমান বা সেই স্ট্রিং দিয়ে হাইফেন অনুসরণ করে শুরু করে

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

3
দুর্দান্ত উত্তর, তবে idএস, সনাক্তকারী হওয়াতে কোনও স্থান থাকতে পারে না , ~=উদাহরণটিকে অন্য কোনও কিছুতে পরিবর্তন করা উচিত, যেমন classশ্বেত-স্থান চিহ্নিতকারীদের তালিকাবদ্ধ তালিকা। বৈশিষ্ট্য বাছাইকারীটির উদ্দেশ্যে classযা কিছু ছিল তার মতো জিনিস ~=
অকেজো কোড

49

যদি আপনার নিয়মিত অভিব্যক্তির ব্যবহার পরীক্ষার মধ্যে সীমাবদ্ধ থাকে যদি কোনও নির্দিষ্ট স্ট্রিং দিয়ে কোনও অ্যাট্রিবিউট শুরু হয়, আপনি ^জিকুয়ারি নির্বাচনকারী ব্যবহার করতে পারেন ।

উদাহরণস্বরূপ, যদি আপনি কেবল "এবিসি" দিয়ে আইডি দিয়ে ডিভি নির্বাচন করতে চান, আপনি ব্যবহার করতে পারেন:

$("div[id^='abc']")

রেগেক্সের ব্যবহার এড়াতে খুব দরকারী নির্বাচকদের এখানে পাওয়া যাবে: http://api.jquery.com/category/selectors/attribute-selectors/


এটি সংবেদনশীল মিলগুলির প্রয়োজনীয়তার ক্ষেত্রে কাজ করবে না। ফিল্টার ফাংশন সেই প্রয়োজনগুলির সাথে আরও ভাল ফিট করে।
ব্রেননদেব

2
এই আমার জন্য ভাল ছিল, আমি শুধু যদি একটি ইনপুট আইডি প্রান্তে একটি '__destroy' তাই আমি ব্যবহার করা হয়েছে দেখতে চেয়েছিলেন *=: মত এই$("input[id*='__destroy'][value='true']")
ryan2johnson9


8

একটি jQuery ফাংশন যোগ করুন,

(function($){
    $.fn.regex = function(pattern, fn, fn_a){
        var fn = fn || $.fn.text;
        return this.filter(function() {
            return pattern.test(fn.apply($(this), fn_a));
        });
    };
})(jQuery);

তারপর,

$('span').regex(/Sent/)

পাঠ্য মিল / প্রেরিত / সহ সমস্ত স্প্যান উপাদান নির্বাচন করবে।

$('span').regex(/tooltip.year/, $.fn.attr, ['class'])

সমস্ত শ্রেণীর উপাদানগুলি তাদের শ্রেণীর সাথে মেলে / টলটিপ.ইয়ার / নির্বাচন করবে।


7

আইডিসি এবং ক্লাসগুলি এখনও বিশিষ্টতা, তাই আপনি যদি সে অনুযায়ী নির্বাচন করেন তবে আপনি তাদের কাছে একটি রেজিপ্লেক্স অ্যাট্রিবিউট ফিল্টার প্রয়োগ করতে পারেন। এখানে আরও পড়ুন: http://rosshawkins.net/archive/2011/10/14/jquery-wildcard-selectors-some-simple-exferences.aspx



2

আমি কেবল আমার আসল সময়ের উদাহরণ দিচ্ছি:

নেটিভ জাভাস্ক্রিপ্টে আমি আইডি সহ উপাদানগুলি সন্ধান করতে নিম্নলিখিত স্নিপেট ব্যবহার করে "সিলেক্ট 2-কিউনার-নেম_সিলিট-ফলাফল" দিয়ে শুরু করি।

document.querySelectorAll("[id^='select2-qownerName_select-result']");

যখন আমরা জাভাস্ক্রিপ্ট থেকে jQuery এ স্থানান্তরিত করেছি তখন আমরা উপরের স্নিপেটটি নীচের সাথে প্রতিস্থাপন করেছি যা যুক্তিকে বিরক্ত না করে কম কোড পরিবর্তন জড়িত।

$("[id^='select2-qownerName_select-result']")


আমি jQuery ছাড়াই কেবল বিকল্পটি খুঁজে পেয়েছি এবং সবচেয়ে কার্যকর একটি। ধন্যবাদ!
ggonmar

1

আপনি যদি কেবলমাত্র প্রদত্ত স্ট্রিং সমন্বিত উপাদান নির্বাচন করতে চান তবে নীচের নির্বাচকটি ব্যবহার করতে পারেন:

$(':contains("search string")')

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