পাঠ্য দ্বারা লিঙ্ক নির্বাচন করুন (সঠিক মিল)


89

JQuery ব্যবহার করে, আমি একটি লিঙ্ক নির্বাচন করতে চাই যাতে ঠিক কোনও ধরণের পাঠ্য থাকে। উদাহরণ স্বরূপ:

<p><a>This One</a></p>
<p><a>"This One?"</a></p>
<p><a>Unlikely</a></p>

আমি এটি চেষ্টা করেছি:

$('a:contains("This One")')

তবে এটি প্রথম এবং দ্বিতীয় লিঙ্কটি তুলে ধরে। আমি কেবল প্রথম লিঙ্কটি চাই, যা ঠিক "এই এক" অন্তর্ভুক্ত। আমি এটা কিভাবে করবো?


উত্তর:


139

তুমি এটি করতে পারো:

$('a').filter(function(index) { return $(this).text() === "This One"; });

তথ্যসূত্র: http://api.jquery.com/filter/


4
হয় এই ক্ষেত্রে কাজ করবে, তবে আমি === ব্যবহার করার প্রবণতা কারণ এটি মান এবং টাইপের সাথে মেলে, অর্থাত্ এটি প্রকারগুলিকে জোর করে না। stackoverflow.com/questions/359494/...
FishBasketGordo

4
আপনি মিস return। আমাকে এটিকে পরিবর্তন করতে হবেfunction(index) { return (this.text === 'This One') }
এন্ডি তাজাহোনো

অতিরিক্তভাবে, আপনি পাঠ্য দৈর্ঘ্যের জন্য পরীক্ষা করতে পারেন।
Bestinamir

39

আমার সহকর্মী এই কাজটি করার জন্য একটি ক্রিয়াকলাপ সহ jQuery প্রসারিত করেছেন:

$.expr[':'].textEquals = function(a, i, m) {
    return $(a).text().match("^" + m[3] + "$");
};

ফলাফলটি হ'ল আপনি সঠিক পাঠ্য দ্বারা এভাবে কিছু নির্বাচন করতে পারেন:

$("label:textEquals('Exact Text to Match')");

এটি আপনাকে সহজ করে তোলে, যেহেতু আপনাকে প্রতিবার সঠিক সিনট্যাক্সটি মনে রাখতে হবে না। তার সম্পূর্ণ পোস্টটি এখানে: সঠিক পাঠ্য দ্বারা পাঠ্য উপাদানগুলি নির্বাচন করার জন্য jQuery কাস্টম নির্বাচনকারী: পাঠ্যকালীন


28

ফিশব্যাসকেটগোর্ডোর উত্তরে প্রসারিত করা। আপনি যদি প্রচুর পরিমাণে উপাদানগুলিতে নির্বাচন করার চেষ্টা করছেন তবে :contains()প্রথমে সংকীর্ণ করুন এবং তারপরে ফিল্টারটি প্রয়োগ করুন।

এটি সামগ্রিক গতি উন্নতি করবে:

$('a:contains("This One")').filter(function(index)
{
    return $(this).text() === "This One";
});

গতি / দক্ষতার জন্য ভোট দিয়েছেন। এছাড়াও, ফিল্টার (..) এর মধ্যে $ .Trim () স্পেস প্রয়োজন avo
জোপিসি

8

নারিমন এর সমাধান হতে হবে:

$.expr[':'].textEquals = function(a, i, m) {
    var match = $(a).text().match("^" + m[3] + "$")
    return match && match.length > 0;                                                                                                                                                                                                                                            
}

অন্যথায় ক্রোমে কাজ হয়নি (লিনাক্স)


6

আমি এক্সটেনশনটি ব্যবহার করছিলাম

$.expr[':'].textEquals

তবে আমি দেখতে পেয়েছি যে বাস্তবায়ন আর jQuery 1.7 (স্পষ্টতই সিজলা.ফিল্টার পরিবর্তন) এর সাথে কাজ করে না। কিছুক্ষণ কাজ করার জন্য সংগ্রাম করার পরে আমি কেবল এটি সম্পাদন করতে একটি jQuery প্লাগইন লিখেছি।

$.fn.textEquals = function (text) {
    var match = false;
    $(this).each(function () {
        if ($(this).text().match("^" + escapeRegex(text) + "$")) {
            match = true;
            return false;
        }
    });
    return match;
};

ব্যবহার:

$(".ui-autocomplete li").textEquals('Exact Text to Match');

কেবল ভাগ করে নিতে চেয়েছিলেন, যদি অন্য কেউ এর মধ্যে চলে যায় (,


3

সুতরাং নার্নিয়ান এর উত্তর বেশ ভাল কাজ করে। এটি বন্যে ব্যবহার করে, তবে আমি কয়েকটি সমস্যার মধ্যে ছুঁড়েছি, যেখানে আমি যে জিনিসগুলি খুঁজে পাওয়ার আশা করতাম তা পাওয়া যায় নি। এটি হ'ল কারণ কখনও কখনও উপাদানটির পাঠ্যের চারপাশে এলোমেলো সাদা স্থান থাকে। এটি আমার বিশ্বাস যে আপনি যদি "হ্যালো ওয়ার্ল্ড" অনুসন্ধান করেন তবে আপনি এটি "হ্যালো ওয়ার্ল্ড", এমনকি "হ্যালো ওয়ার্ল্ড \ n" এর সাথে মিলিয়ে দেখতে চান। সুতরাং আমি ফাংশনে সবেমাত্র "ট্রিম ()" পদ্ধতি যুক্ত করেছি, যা আশেপাশের সাদা অংশকে সরিয়ে দেয় এবং এটি আরও ভাল কাজ শুরু করে। এছাড়াও, আমি ভেরিয়েবলের নামগুলিকে আমার মনের থেকে আরও পরিষ্কার করার জন্য পরিবর্তন করেছি।

বিশেষত ...

$.expr[':'].textEquals = function(el, i, m) {
    var searchText = m[3];
    var match = $(el).text().trim().match("^" + searchText + "$")
    return match && match.length > 0;
}

এবং গৌণ নোট ... ট্রিম অনুসন্ধানের পাঠ্যের আগে এবং পরে কেবল সাদা স্থান সরিয়ে দেয়। এটি শব্দের মাঝখানে সাদা অংশ সরিয়ে দেয় না। আমি বিশ্বাস করি এটি পছন্দসই আচরণ, তবে আপনি চাইলে আপনি এটি পরিবর্তন করতে পারেন।


3
$('a:contains("This One")')[0];

আমার মনে হচ্ছে আমি ফিল্টার করা প্রত্যেকের উত্তরের উপর ভিত্তি করে কিছু মিস করছি তবে কেন কেবল 'উপাদানগুলি' দিয়ে ফিরে আসা উপাদানগুলির অ্যারের মধ্যে প্রথম আইটেমটি নির্বাচন করবেন না?

এটি কাজ করে, কেবলমাত্র যদি আপনি জানেন যে প্রথম লিঙ্কটিতে আপনি যা খুঁজছেন ঠিক সেই মিল রয়েছে। অন্যান্য উত্তরগুলি আরও ভাল কাজ করে যদি আপনি নিশ্চিত না হন যে লিঙ্কগুলি কোন ক্রমে থাকবে।


কারণ তিনি সর্বদা জানেন না যে তিনি চান প্রথমটি
ক্যামেরন

প্রশ্নটি বিশেষত জিজ্ঞাসা করে "আমি কেবল প্রথম লিঙ্কটি চাই"।
মাইকেল খলিলি

প্রশ্নটি সঠিক মিলের জন্য জিজ্ঞাসা করে, লেখক কোন উপাদানটি চায় তা ব্যাখ্যা করার জন্য প্রথম উপাদানটি নির্দেশ করে।
dlopezgonzalez

2

ড্রপ-ডওয়ান থেকে নির্বাচিত মানটি কীভাবে পাবেন:

$.fn.textEquals = function (text) {
    var match = false; 
    var values="";
    $(this).each(function () {
        if ($(this).text().match("^" + text + "$")) {
            values=$(this).val();
            match = true;
            return false;
        }
    });
    return values;
};

console.log($("option").textEquals("Option One")); - এটি ড্রপ-ডাউনের মান ফিরিয়ে দেবে


2
var link = $('a').filter(function(index) { return $(this).text() === "Availability"; });
 $(link).hide();
        $(link).removeAttr('href');

4
আপনি উত্তর উত্তর যোগ করুন।
মিশা পেরেকোভস্কি

সেই পাঠ্যের সাথে যে কোনও লিঙ্ক নির্বাচন করার জন্য প্রথম লাইন, দ্বিতীয় এবং তৃতীয় লাইনের লিঙ্কটি লুকিয়ে রাখতে বা লিঙ্কটি অক্ষম করতে jquery ডকুমেন্টেশন api.jquery.com/filter- এ ফিলিপটি
ডেভিড

@ ডেভিডফাউজি - দুঃখিত, হুম ... কি ?? আমি মনে করি না যে দ্বিতীয় বা তৃতীয় লাইনের ওপির প্রশ্নের সাথে কোনও সম্পর্ক আছে - এটি কেবল বিভ্রান্তি যুক্ত করে।
jbyrd

2

দুঃখিত, এটি যদি উপরের কারওর উত্তর সাথে ঠিক মিলে যায়,

   $.fn.equalsText = function (text, isCaseSensitive) {
      return $(this).filter(function () {
         if (isCaseSensitive) {
            return $(this).text() === text
         } else {
            return $(this).text().toLowerCase() === text.toLowerCase()
         }
      })
   }

এখানে লিঙ্কডিন অনুসন্ধান ফলাফল পৃষ্ঠার কনসোলের কিছু আউটপুট দেওয়া আছে।

$("li").equalsText("Next >", false)
[<li class="next">​…​</li>​] // Output

$("li").equalsText("next >", false)
[<li class="next">​…​</li>​] // Output

$("li").equalsText("Next >", true)
[<li class="next">​…​</li>​] // Output

$("li").equalsText("next >", true)
[] // Output

এটির ক্ষেত্রে কেস সংবেদনশীলতা সমর্থন রয়েছে এবং এটি ব্যবহার করছে না :contains()

সম্পাদনা (22 মে, 2017): -

   $.fn.equalsText = function (textOrRegex, isCaseSensitive) {
      return $(this).filter(function () {
         var val = $(this).text() || this.nodeValue
         if (textOrRegex instanceof RegExp) {
            return textOrRegex.test(val)
         } else if (isCaseSensitive) {
            return val === textOrRegex
         } else {
            return val.toLowerCase() === textOrRegex.toLowerCase()
         }
      })
   }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.