কোনও ম্যাচ করা ক্লাসের প্রদত্ত আইডি থাকলে jQuery নির্ধারণ করুন


97

নীচের বিবৃতিটির সমতুল্য jQuery কী?

$('#mydiv').hasClass('foo')

যাতে আপনি কোনও শ্রেণীর নাম দিতে পারেন এবং এটিতে সরবরাহ করা আইডি রয়েছে কিনা তা পরীক্ষা করতে পারেন।

কিছুটা এইরকম:

$('.mydiv').hasId('foo')

আমি একটি নির্দিষ্ট ডিভের জন্য একটি স্টাইল প্রয়োগ করতে চাই। উদাহরণস্বরূপ লোড টাইমের সময় ফু ক্লাসের সমস্ত দেখানো হবে, তবে আমি ক্লাস ফু এর একটি উদাহরণ টগল করতে চাইতে পারি যার বারের আইডি রয়েছে।
নিকোলাস মারে

4
তারপরে আপনি কেবলমাত্র $('#bar.foo').toggle();কেবলমাত্র একটি আইডি পাবেন কারণ সেগুলি নথির অনন্য হওয়ার জন্য প্রয়োজনীয়। যদি আপনি পিঁপড়াটি কেবল সেই আইডি টগল করে থাকে যদি এটি শ্রেণীর হয় fooতবে কেবল আইডি নির্বাচনকারীকে ক্লাস যুক্ত করুন। যদি নির্বাচক একটি খালি সেট খুঁজে পায় তবে কিছুই হবে না, যদি ফলাফলের সাথে একটি সেট খুঁজে পায় (যার মধ্যে কেবলমাত্র একটিই থাকবে) তবে এটি উপাদানটি টগল করবে। আমার মনে হয় আপনি এটিকে বোঝাচ্ছেন
প্রোডিজিটালসন

4
কেবল এটি বলার জন্যই লোকেরা হতাশ করছে "আপনি কেন কখনও তা করতে চান?" যখন আমি এখনই এটি করার চেষ্টা করছি হ্যাচক্লাসের সমস্যাটি হ'ল যদি নির্বাচকটির সাথে মেলে এমন কোনও উপাদান প্রদত্ত বর্গ থাকে তবে এটি সত্য হয়। আমার যেখানে ক্লাস "কেক" এবং প্রতিটি ("একটি", "দুটি" ইত্যাদি) এর অতিরিক্ত ক্লাসের নাম সহ অনেক পি আছে আমার সমস্যা হচ্ছে। আমি পি কোডের সাধারণ সেটটি নির্বাচন করতে চাই এবং তারপরে একটি শর্তসাপেক্ষ (যদি শ্রেণি = "এক" - $ ভ্যার = 23 - ইত্যাদি) থাকে। মুল বক্তব্যটি হ'ল আমি অতিরিক্ত শ্রেণীর নামের উপর নির্ভর করে একটি ভিন্ন $ var পাস করার চেষ্টা করছি। আমি চেষ্টা করছি যে পুরো বিটটি আবার না করাতে হবে
স্টেলা

উত্তর:


173

আপনি একাধিক নির্বাচককে একত্রিত করে সেই যুক্তিকে সিলেক্টারে বেক করতে পারেন । উদাহরণস্বরূপ, আমরা প্রদত্ত আইডি সহ সমস্ত উপাদানকে লক্ষ্য করতে পারি, যার একটি নির্দিষ্ট বর্গ রয়েছে:

$("#foo.bar"); // Matches <div id="foo" class="bar">

এটি CSS এ আপনি লিখতে চান এমন কিছুর মতো দেখতে পাওয়া উচিত। মনে রাখবেন যে এটি সমস্ত #fooউপাদানগুলিতে প্রযোজ্য হবে না (যদিও কেবল সেখানে একটি হওয়া উচিত) এবং এটি সমস্ত .barউপাদানগুলিতে প্রযোজ্য হবে না (যদিও অনেকগুলি থাকতে পারে)। এটি কেবলমাত্র দুটি উপাদানগুলিতেই যোগ্যতাযুক্ত উপাদানগুলি উল্লেখ করবে।

jQuery এর একটি দুর্দান্ত .isপদ্ধতিও রয়েছে যা আপনাকে নির্ধারণ করতে দেয় যে কোনও উপাদানের নির্দিষ্ট গুণ রয়েছে। আপনি স্ট্রিং সিলেক্টর, এইচটিএমএল এলিমেন্ট বা অন্য কোনও jQuery অবজেক্টের বিপরীতে jQuery সংগ্রহ পরীক্ষা করতে পারেন। এই ক্ষেত্রে, আমরা কেবল স্ট্রিং নির্বাচকের বিরুদ্ধে এটি পরীক্ষা করব:

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo'

32
+1 এর জন্য is()। সেখানে একজন .hasId()নির্বাচক থাকা উচিত কারণ এটি .hasClass()সত্যিই একজন সুস্পষ্ট অংশীদার বলে মনে হচ্ছে ...
ম্যাট ফ্লেচার

43

আমি সম্ভবত এটি ব্যবহার করব $('.mydiv').is('#foo');যদি আপনি আইডিটি জানেন তবে আপনি কেন এটি প্রথম স্থানে নির্বাচককে প্রয়োগ করবেন?


17
সম্ভবত কোডটি একটি কলব্যাক ফাংশনে চলেছে যা নির্দিষ্ট কিছু ক্ষেত্রে আলাদাভাবে পরিচালনা করতে হবে। সুতরাং, ফাংশনটি অজানা বৈশিষ্ট্যের সাথে একটি jQuery অবজেক্ট স্বয়ংক্রিয়ভাবে পাস করা হবে। এই ক্ষেত্রে, $ ('আপনার উত্তর')। ('সহায়ক');
পিটার জি

4
আমি যে কোনও কারণ নিয়ে ভাবতে পারি। আপনি যদি কোনও মোবাইল নির্দিষ্ট সেটিংস প্রয়োগ করতে চান, তবে কোনও উপাদানটির আইডি = "মোবাইল" থাকলে has কেন গুরুত্বপূর্ণ নয়।
স্থানান্তরযোগ্য

ঠিক আছে কেবলমাত্র 1 টি উপাদানটি কখনই দেওয়া idউচিত অন্যথায় এটি অন্য কিছু বৈশিষ্ট্য হওয়া উচিত ... আমি মনে করি পৃষ্ঠাটি বা ক্লায়েন্ট / ব্যবহারকারী-এজেন্টের ভিত্তিতে প্রশ্ন পরিবর্তনের উপাদানটির কাঠামোগত অবস্থান যদি ঠিক আছে তবে এটি ছাড়া অন্য .. ।
প্রোডিজিটালসন

19

আপডেট: দুঃখিত প্রশ্নটি ভুল বুঝেছেন, .has()উত্তর সরিয়েছেন ।

অন্য বিকল্প উপায়, .hasId()প্লাগইন তৈরি করুন

// the plugin
$.fn.hasId = function(id) {
  return this.attr('id') == id;
};

// select first class
$('.mydiv').hasId('foo') ?
  console.log('yes') : console.log('no');

// select second class
// $('.mydiv').eq(1).hasId('foo')
// or
$('.mydiv:eq(1)').hasId('foo') ?
  console.log('yes') : console.log('no');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="mydiv" id="foo"></div>
<div class="mydiv"></div>


4
দুঃখিত তবে আমি মনে করি আপনি প্রশ্নের ভুল ব্যাখ্যা করেছেন : হ্যাঁ () এপিআই এই প্রতিবেদন করেছে: নির্বাচক বা ডিওএম উপাদানগুলির সাথে মেলে এমন বংশধরদের সাথে ম্যাচ করা উপাদানগুলির সেট হ্রাস করুন । ওপিতে জিজ্ঞাসা করা হচ্ছে যে কীভাবে 'মাইডিভ' শ্রেণীর উপাদানগুলির সাথে আইডি ফু রয়েছে, তবে () 'আইডি' ফু 'থাকা' মাইডিভ 'এর বংশধরদের সন্ধান করবে test
কাত

7

ধরা যাক যে আপনি কয়েকটি ডিওএম অবজেক্টের মাধ্যমে পুনরাবৃত্তি করছেন এবং আপনি নির্দিষ্ট আইডির সাহায্যে কোনও উপাদান খুঁজে পেতে এবং ধরতে চান

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
</div>

আপনি হয় যেমন কিছু লিখতে পারেন

$('#myDiv').find('#bar')

মনে রাখবেন যে আপনি যদি কোনও শ্রেণি নির্বাচক ব্যবহার করেন তবে সন্ধানের পদ্ধতিটি সমস্ত মিলে যাওয়া উপাদানগুলিকে ফিরিয়ে দেবে।

অথবা আপনি একটি পুনরাবৃত্তি ফাংশন লিখতে পারেন যা আরও উন্নত কাজ করবে

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
    <div id="fo1"><div>
    <div id="bar1"><div>
    <div id="fo2"><div>
    <div id="bar2"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).attr('id') == 'bar1')
       //do something with bar1
});

শ্রেণি নির্বাচকের জন্য একই কোডটি সহজেই সংশোধন করা যেতে পারে।

<div id="myDiv">
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).hasClass('bar'))
       //do something with bar
});

আমি খুশি যে আপনি সূচক () দিয়ে আপনার সমস্যাটি সমাধান করেছেন, যা আপনার পক্ষে কখনও কাজ করে I আমি আশা করি এটি একই সমস্যাটি অন্যদের সহায়তা করবে। চিয়ার্স :)


4
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });

প্রত্যেকটি অপ্রয়োজনীয় কারণ এখানে একের বেশি কখনও হবে না #theMysteryId
প্রোডিজিটালসন

4
ভাল এটি আপনাকে একটি ভেরিয়েবলের নিয়োগের ঝামেলা বাঁচায়, দৈর্ঘ্যটি খালি নয় কিনা তা পরীক্ষা করে কোডটি চালিয়ে যান। যদি নির্বাচক কোনও কিছুর সাথে মেলে না তবে jQuery কেবল "প্রতিটি" ফাংশন কল করবে না, তাই এটি দুর্দান্ত এবং পরিষ্কার। এখন আপনি যদি কিছু করতে চান তবে কিছু jQuery এপিআই কল করা উচিত, তবে নিশ্চিত।
পয়েন্টি

4

কেবলমাত্র আমি শেষ পর্যন্ত সূচক () ব্যবহার করে এটি সমাধান করেছি solved

আর কিছুই মনে হচ্ছে কাজ করছে না।

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

সম্পাদনা করুন: যারা জানেন না (আমার মতো) সূচক () নির্বাচিতদের সাথে মেলে এমন প্রতিটি উপাদানগুলির জন্য একটি সূচক মান দেয় যা 0 থেকে ডিওমে তাদের আদেশের উপর নির্ভর করে গণনা করে। যতক্ষণ আপনি জানেন যে ক্লাস = "ফু" দিয়ে কতগুলি উপাদান রয়েছে আপনার কোনও আইডি লাগবে না।

স্পষ্টতই এটি সর্বদা সহায়তা করবে না, তবে কেউ এটি দরকারী বলে মনে করতে পারেন।



1

আপনি যদি এটি ব্যবহার করে আইডি উপাদানটি ব্যবহার করেন তবে তাও পরীক্ষা করতে পারেন:

if(typeof $(.div).attr('id') == undefined){
   //element has no id
} else {
   //element has id selector
}

আমি বিশ্বব্যাপী ডেটা টেবিল এবং নির্দিষ্ট আদেশযুক্ত ডেটা টেবিলগুলির জন্য এই পদ্ধতিটি ব্যবহার করি


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