JQuery ব্যবহার করে পাঠ্য স্ট্রিংটি সন্ধান করবেন?


241

বলুন যে কোনও ওয়েব পৃষ্ঠার একটি স্ট্রিং রয়েছে যেমন "আমি একটি সাধারণ স্ট্রিং" যা আমি সন্ধান করতে চাই। আমি কীভাবে JQuery ব্যবহার করে এটি সম্পর্কে যাব?

উত্তর:


327

jQuery এর পদ্ধতি রয়েছে। আপনার জন্য একটি স্নিপেট এখানে:

<script type="text/javascript">
$(function() {
    var foundin = $('*:contains("I am a simple string")');
});
</script>

উপরের নির্বাচক লক্ষ্যবস্তু স্ট্রিং রয়েছে এমন কোনও উপাদান নির্বাচন করে। ফাউন্ডিনটি একটি jQuery অবজেক্ট হবে যাতে কোনও মিলযুক্ত উপাদান রয়েছে। এপিআই তথ্যটি এখানে দেখুন: https://api.jquery.com/contains-selector/

'*' ওয়াইল্ডকার্ডের সাথে একটি বিষয় লক্ষণীয় হ'ল আপনি এইচটিএমএল সহ সমস্ত উপাদান পাবেন যা আপনি সম্ভবত চান না body এজন্য jQuery এবং অন্যান্য জায়গাগুলির বেশিরভাগ উদাহরণ $ ('ডিভ: ধারণ করে ("আমি একটি সাধারণ স্ট্রিং")' 'ব্যবহার করি)


12
@ টনি, আমি কীভাবে কেবলমাত্র পুরো প্যারাগ্রাফ, ডিভ ইত্যাদি ইত্যাদির সাথে নয়, কেবলমাত্র মিলে যাওয়া পাঠ্যগুলিতে হেরফের করব?
কিথ ডোনেগান

12
এটি উল্লেখ করা উচিত যে এটি কেস-সংবেদনশীল। "আমি" নামের একজন ব্যবহারকারী এটি jQuery ডক্স পৃষ্ঠায় লিখেছেন: ex .expr [':']। আইকোনটেনস = ফাংশন (অবজেক্ট, সূচক, মেটা, স্ট্যাক) {রিটার্ন (obj.textContent || obj.innerText || jQuery ( আপত্তি। }; উদাহরণ: $ ("ডিভ: আইকনটেনস ('জন')")। সিএসএস ("পাঠ্য-সজ্জা", "আন্ডারলাইন");
ব্র্যান্ডন ব্লুম

এটি জসনের জন্য কাজ করে? আমি যদি কোনও জেসন মানতে কিছু পাঠ্য ফিল্টার করতে চাই তবে কী হবে?
চামিলিয়ান

5
পাঠ্য নোডে লাইন ব্রেক যেমন উদাহরণস্বরূপ এটি কাজ করবে না। "আমি একটি সাধারণ \ n স্ট্রিং"। নোট করুন যে লাইন ব্রেকটি রেন্ডার করা হবে না যাতে ব্যবহারকারী এমনকি সমস্যাটি কোথায় তা জানেন না। এই সমস্ত সমাধানে এই সমস্যা রয়েছে। দেখুন jsfiddle.net/qPeAx
Jesper

9
-1, কাজ করে না। এটি গাছের সমস্ত পিতামাতার নোডগুলি দেয়, আপনি কেবল সর্বনিম্ন চাই one
টিএমএস

51

সাধারণত jQuery নির্বাচনকারীরা DOM এর "পাঠ্য নোড" এর মধ্যে অনুসন্ধান করে না। তবে আপনি যদি অনুচ্ছেদে () ফাংশনটি ব্যবহার করেন তবে পাঠ্য নোডগুলি অন্তর্ভুক্ত করা হবে, তবে আপনি কেবল পাঠ্য নোডগুলি ফিল্টার করতে নোডটাইপ সম্পত্তি এবং পাঠ্য স্ট্রিং অনুসন্ধান করতে নোডভ্যালু সম্পত্তি ব্যবহার করতে পারেন।

    $ ('*', 'দেহ')
        .andSelf ()
        .contents ()
        .filter (ফাংশন () {
            এটি.নোডটাইপ === 3 প্রদান করুন;
        })
        .filter (ফাংশন () {
            // পাঠ্যের যে কোনও জায়গায় 'সরল স্ট্রিং' থাকলে কেবল মিল হয় match
            this.nodeValue.indexOf ('সরল স্ট্রিং') ফেরান! = -1;
        })
        .each (ফাংশন () {
            // এই.নোডভ্যালু দিয়ে কিছু করুন
        });

8
স্পষ্ট করার জন্য, যেমন টনি উল্লিখিত হয়েছে আপনি টেক্সট নোডগুলির মধ্যে অনুসন্ধানের জন্য ": অন্তর্ভুক্ত ()" নির্বাচক ব্যবহার করতে পারেন, তবে jQuery ফলাফলগুলিতে পৃথক পাঠ্য নোডগুলি ফিরিয়ে দেবে না (কেবলমাত্র উপাদানের একটি তালিকা)। কিন্তু যখন আপনি। উপাদানসমূহ () ব্যবহার করেন, তারপরে jQuery দুটি উপাদান এবং পাঠ্য নোড প্রদান করে। আরও তথ্যের জন্য: ডকস.জ্যাকারি
ট্র্যাভারসিং

5
আপনি কেন ব্যবহার করছেন তা দেখে আমি বিস্মিত হই .andSelf()Api.jquery.com/andSelf থেকে : "jQuery অবজেক্টগুলি একটি অভ্যন্তরীণ স্ট্যাক বজায় রাখে যা উপাদানগুলির সাথে মেলে সেটের পরিবর্তনের উপর নজর রাখে the DOM ট্র্যাভারসাল পদ্ধতিগুলির মধ্যে একটি যখন ডাকা হয়, তখন উপাদানগুলির নতুন সেটটি স্ট্যাকের দিকে ঠেলা যায় If পূর্ববর্তী উপাদানগুলির সেটটিও পছন্দসই, এবং নিজেই সাহায্য করতে পারে) " আমি আগের কোনও প্রসঙ্গ দেখছি না, আমি কী মিস করছি?
অ্যালান এইচ।

1
সম্মত! গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি সমস্ত প্যারেন্ট নোডগুলি ফিল্টার করে যা আমার ধারণা বেশিরভাগ পরিস্থিতিতে সাধারণ প্রয়োজন।
লুকাম

29

এটি কেবলমাত্র পাতার উপাদান নির্বাচন করবে যা "আমি একটি সাধারণ স্ট্রিং" রয়েছে।

$('*:contains("I am a simple string")').each(function(){
     if($(this).children().length < 1) 
          $(this).css("border","solid 2px red") });

এটি পরীক্ষা করার জন্য ঠিকানা বারে নিম্নলিখিতটি আটকান।

javascript: $('*:contains("I am a simple string")').each(function(){ if($(this).children().length < 1) $(this).css("border","solid 2px red") }); return false;

আপনি শুধু দখল করতে চান "আমি একটি সহজ স্ট্রিং am" । প্রথমে এর মতো কোনও উপাদানটিতে পাঠ্যটি মোড়ানো করুন।

$('*:contains("I am a simple string")').each(function(){
     if($(this).children().length < 1) 
          $(this).html( 
               $(this).text().replace(
                    /"I am a simple string"/
                    ,'<span containsStringImLookingFor="true">"I am a simple string"</span>' 
               )  
           ) 
});

এবং তারপরে এটি করুন।

$('*[containsStringImLookingFor]').css("border","solid 2px red");

3
। ফিল্টার () ফাংশনটি এখানে .each () এর চেয়ে বেশি কার্যকর হবে। আসলে, আপনি আসলে এটি একটি নির্বাচককে রাখতে পারেন: "*: রয়েছে ('ব্লাহ'): খালি"
নিকফ

2
#nickf -: খালি অভ্যাস এমন পাঠ্য নোড নির্বাচন করবে যাতে পাঠ্য থাকবে। সুতরাং যদি পাঠ্য নোডে "আমি একটি সাধারণ স্ট্রিং" থাকে তবে এটি বাদ দেওয়া হয়। docs.jquery.com/Selectors/empty
স্লিম

2
আমি জানি আমি এখানে একটু দেরি করেছি, তবে এটি এমন কোনও পাঠ্য ব্লককে উপেক্ষা করবে না যেখানে স্ট্রিং শীর্ষ স্তরে উপস্থিত রয়েছে তবে এর মধ্যে শিশু রয়েছে? উদাহরণস্বরূপ: <blockquote> আমি একটি সাধারণ স্ট্রিং <স্প্যান শৈলী = "ফন্ট-ওজন: গা bold়;"> উত্তরে থাকি </ span> </ blockquote>
কেন বেলোজ

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

17

আপনি যে পাঠ্যের সন্ধান করছেন তার নিকটবর্তী নোডটি যদি চান তবে আপনি এটি ব্যবহার করতে পারেন:

$('*:contains("my text"):last');

এমনকি যদি আপনার এইচটিএমএল এর মত দেখায় এটি কাজ করবে:

<p> blah blah <strong>my <em>text</em></strong></p>

উপরের নির্বাচকটি ব্যবহার করে <strong>ট্যাগটি পাওয়া যাবে, যেহেতু এটিই শেষ ট্যাগ যা পুরো স্ট্রিংটি ধারণ করে।


1
এটি কাজ করে না বলে মনে হচ্ছে। এই পৃষ্ঠায়, উদাহরণস্বরূপ, *: ("" ") রয়েছে: সর্বশেষে কেবল 1 টি উপাদান দেয়।
bzlm

4
@ বিজেএলএম: ভালভাবে এটি নির্দিষ্ট করে না যে তিনি একাধিক ঘটনা খুঁজে পেতে চেয়েছিলেন।
নিকফ

2
আহা। এটি একাধিক ঘটনার জন্য কাজ করার উপায় আছে কি? আমার মনে হয় এটা রিকার্সিভ নোড টাইপ চেক ইত্যাদি জড়িত বেশী বেশি মার্জিত সমাধান
bzlm

1
সমস্ত নোড পাওয়ার জন্য কেবলমাত্র আমিই ভাবতে পারি, তবে সমস্ত পূর্বপুরুষরা এই লাইনটি শেষ করে না, ফলে সমস্ত পিতামাতাকে সরিয়ে ফেলতে পারে, যদিও আপনার সমস্যা হতে পারে, যেমন: <p>my text <b>my text</b></p>- <b>ট্যাগের পূর্বপুরুষদের অপসারণ করা হবে অন্য ম্যাচটি হারাবেন
নিকফ


7

টনি মিলারের উত্তরে কেবল যুক্ত করা কারণ এটি আমার সন্ধানের দিকে 90% পেয়েছিল তবে এখনও কাজ করে নি। .length > 0;তার কোডের শেষে যুক্ত করে আমার স্ক্রিপ্টটি কাজ করে।

 $(function() {
    var foundin = $('*:contains("I am a simple string")').length > 0;
 });

খুঁজে পাওয়া স্ট্রিংয়ে কীভাবে একটি নতুন শব্দ যুক্ত করা যায়?
ব্যবহারকারীএজলজিক অ্যাপস

@ সামলপিপি foundin += '*';
পিক্সেলোম

2

এই ফাংশন কাজ করা উচিত। আমরা লিফ নোডগুলির একটি স্বতন্ত্র তালিকা না পাওয়া পর্যন্ত মূলত একটি পুনরাবৃত্ত অনুসন্ধান রয়েছে।

function distinctNodes(search, element) {
    var d, e, ef;
    e = [];
    ef = [];

    if (element) {
        d = $(":contains(\""+ search + "\"):not(script)", element);
    }
    else {
            d = $(":contains(\""+ search + "\"):not(script)");
    }

    if (d.length == 1) {
            e.push(d[0]);
    }
    else {
        d.each(function () {
            var i, r = distinctNodes(search, this);
            if (r.length === 0) {
                e.push(this);
            }
            else {
                for (i = 0; i < r.length; ++i) {
                    e.push(r[i]);
                }
            }
        });
    }
    $.each(e, function () {
        for (var i = 0; i < ef.length; ++i) {
            if (this === ef[i]) return;
        }
        ef.push(this);
    });
    return ef;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.