jQuery বা নির্বাচক?


325

আমি ভাবছি যে jQuery নির্বাচকদের "OR" যুক্তি রাখার কোনও উপায় আছে কিনা। উদাহরণস্বরূপ, আমি জানি যে উপাদানটি হয় শ্রেণি ক্লাসএ বা ক্লাসবি সহ একটি উপাদানটির বংশধর এবং আমি এর মতো কিছু করতে চাই elem.parents('.classA or .classB')। JQuery এই ধরনের কার্যকারিতা সরবরাহ করে?

উত্তর:


494

কমা ব্যবহার করুন।

'.classA, .classB'

আপনি স্থান বাদ দিতে চয়ন করতে পারেন।


43
এটি লক্ষ করা উচিত যে এটি সত্যিই কোনও 'বা' নির্বাচক নয়, একের মধ্যে একাধিক নির্বাচকের মতো।
অ্যালেক্স

48
@ অ্যালেক্স: তবে এটি একই উপাদানটি দু'বার বাছাই করবে না (যা একটি সংক্ষিপ্ত অপারেটর করবে)। এটি সত্যিই একটি ওআর নির্বাচক কারণ এটি দুটি বা ততোধিক সেটগুলির একটি ইউনিয়ন তৈরি করে (যেখানে এবং এটি একটি ছেদযুক্ত)।
ক্লিটাস

ধন্যবাদ, কাজ করে। একটি ডিবাগিং তদারকির কারণেই আমি ভেবেছিলাম যে কমা ব্যবহারের অর্থ 'ও'।
সুয়ান


2
এটি প্রকৃত প্রশ্নটির উপর নির্ভর করে যা ... ... ক্লাসিকভাবে কোনও 'বা' অপারেটর শর্ট সার্কিট করবে। সুতরাং jquery পার্লেন্সে একটি 'বা' অপারেটর, সম্ভবত শর্ট সার্কিটও হতে পারে।
ম্যাথিউ

71

আপনার যদি একাধিক jQuery অবজেক্টে যোগদানের প্রয়োজন হয় তবে কমা ব্যবহার করা যথেষ্ট না।

.Add () পদ্ধতি ফলাফল সেট নির্বাচিত উপাদান যোগ করেছেন:

// classA OR classB
jQuery('.classA').add('.classB');

এটি এর চেয়ে বেশি ভার্বোজ '.classA, .classB', তবে নীচের মতো আরও জটিল নির্বাচকগুলি তৈরি করতে দেয়:

// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));

22

আমি ঠিক এই কার্যকারিতাটির জন্য একটি অবিশ্বাস্যভাবে সহজ (কোডের 5 লাইন) প্লাগইন লিখেছি:

http://byrichardpowell.github.com/jquery-or/

এটি আপনাকে "এই উপাদানটি পান, বা যদি সেই উপাদানটি বিদ্যমান না থাকে তবে এই উপাদানটি ব্যবহার করুন" বলার অনুমতি দেয়। উদাহরণ স্বরূপ:

$( '#doesntExist' ).or( '#exists' );

স্বীকৃত উত্তর এর সাথে একই রকম কার্যকারিতা সরবরাহ করে, যদি উভয় নির্বাচক (কমা আগে এবং পরে) উপস্থিত থাকে তবে উভয় নির্বাচকই ফিরে আসবেন।

আমি আশা করি গুগলের মাধ্যমে এই পৃষ্ঠায় অবতীর্ণ হতে পারে এমন কারও পক্ষে এটি সহায়ক হিসাবে প্রমাণিত।


4
এটি বুলিয়ান ওআর অপারেটর কীভাবে কাজ করে তা নয়। উভয় নির্বাচক যদি উপাদানগুলি ফেরত দেয়, তবে ওআর অপারেটরের কেবলমাত্র প্রথম নির্বাচকের উপাদানই নয়, সেগুলিও সমস্তই ফিরিয়ে দেওয়া উচিত। আপনার প্লাগইনটির নাম "ifEmpty" বা "অন্য" বা এরকম কিছু হওয়া উচিত।
আল্প

13
@Alp: আচরণকে বিবেচনা "a" || "b"বনাম null || "b"ভ্যানিলা জাতীয় পারে। আমরা যদি এখানে একই আচরণ প্রয়োগ করি তবে এটি উপস্থিত থাকলে $(a).or(b)ফিরে আসা উচিত $(a), অন্যথায় এটি ফিরে আসা উচিত $(b)। "বা" জেএস এর আচরণের সাথে মেলে "বলে এই নামকরণের সাথে কিছু ভুল আছে বলে আমি মনে করি না ||" (বা) অপারেটর।
FtDRbwLXw6

4
আমি এটি একটি হিসাবে দেখতে or। অন্যেরা কী সম্পর্কে কথা বলছেন তা হ'ল একটি concatবা mergeকর্মের মতো like
লিয়ন পেল্টিয়ের

1
ব্যক্তিগতভাবে আমি এটিকে "বা" বলব না, কারণ এটি বিভ্রান্তির কারণ হতে পারে (যদিও এটি প্রযুক্তিগতভাবে সঠিক হতে পারে যদিও এটি / অথবা এর একটি বিশেষ ধরণের হয়)। এই কার্যকরভাবে নাল মিলন, যা বিভিন্ন জিনিস বলা হয় এবং বিভিন্ন ভাষায় বিভিন্ন অপারেটর হয় en.wikipedia.org/wiki/Null_coalescing_operator
JanErikGunnar

'জোর' (এক্সক্লুসিভ বা) শব্দটিটি সঠিক শব্দটি হবে তবে প্রায়শই লোকে লোকেদের সন্ধান করতে বা সন্ধানের জন্য খুঁজে পায়, কারণ সাধারণত জোর সাধারণত সাধারণ ভাষায়, একটি নির্দিষ্ট ধরণের 'বা'।
লিলজোশু

17

যদি আপনি উপাদানটির উপাদান নির্মান = উপাদান 1 || উপাদান 2 যেখানে জাভাস্ক্রিপ্ট সত্যটি প্রথমটি ফিরিয়ে দেবে, আপনি ঠিক এটি করতে পারেন:

element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');

যা প্রকৃতপক্ষে পাওয়া প্রথম উপাদানটিকে ফিরিয়ে দেবে। তবে আরও ভাল উপায় হ'ল এই ফ্যাশনে jQuery সিলেক্টর কমা কনস্ট্রাক্ট (যা পাওয়া উপাদানগুলির একটি অ্যারের ফিরিয়ে দেয়) ব্যবহার করা হবে:

element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];

যা প্রথম পাওয়া উপাদানটি ফিরিয়ে দেবে।

আমি সময় সময় এটি তালিকায় একটি সক্রিয় উপাদান বা কোনও সক্রিয় উপাদান না থাকলে কোনও ডিফল্ট উপাদান খুঁজে পেতে ব্যবহার করি। উদাহরণ স্বরূপ:

element = $('ul#someList').find('li.active, li:first')[0] 

যা সক্রিয় শ্রেণীর সাথে কোনও লি ফিরিয়ে দেবে বা কোনও কিছুই না থাকলে কেবল শেষ লিটি ফিরিয়ে দেবে।

হয় কাজ করবে। || হিসাবে সম্ভাব্য পারফরম্যান্স পেনাল্টি রয়েছে the সত্যবাদী কিছু খুঁজে পাওয়ার সাথে সাথে প্রক্রিয়াজাতকরণ বন্ধ করে দেওয়া হবে তবে অ্যারে পদ্ধতির মধ্যে এটি ইতিমধ্যে একটি সন্ধান পাওয়া গেলেও সমস্ত উপাদান অনুসন্ধান করার চেষ্টা করবে। তারপরে আবার || কন্ট্রাক্টটিতে সম্ভাব্য পারফরম্যান্সের সমস্যা থাকতে পারে যদি এটি ফিরে আসবে তার সন্ধানের আগে বেশ কয়েকটি নির্বাচককে যেতে হয়, কারণ এটি প্রত্যেকের জন্য মূল jQuery অবজেক্টকে কল করতে হবে (আমি সত্যিই জানি না এটি কোনও পারফরম্যান্স হিট কিনা, এটি কেবল যৌক্তিক মনে হয় যে এটি হতে পারে)। সাধারণত, যদিও আমি অ্যারে পদ্ধতির ব্যবহার করি যখন নির্বাচকটি বরং দীর্ঘ স্ট্রিং থাকে।


আমি মনে করি ('.TomeToBeFound, .somethingElseToBeFound') এর মত নয় || গঠন করা। কারণ .SomethingElseToBeFound DOM এর আগে রয়েছে কিনা তা সন্ধান করুন .সোমথিংটোফাউন্ড, এটি কিছুটা হলেও ফিরে আসবে যদি .SomethingToBeFound বিদ্যমান থাকে।
রিমো

0

অবশেষে আমি এটি করতে হ্যাক পেয়েছি:

div:not(:not(.classA,.classB)) > span

(ক্লাসের সাথে classAবা classBসরাসরি শিশুদের স্প্যান সহ ডিভিড নির্বাচন করে )


-2

ড্যানিয়েল এ হোয়াইট সলিউশন ক্লাসগুলির জন্য দুর্দান্ত কাজ করে।

আমি এমন একটি পরিস্থিতি পেয়েছি যেখানে আমাকে ইনডেক্স ক্ষেত্রগুলি সন্ধান করতে হবে ডডে_1_কার্ড যেখানে 1 সূচক।

আমার সমাধান হয়েছে

$("input[name^='donee']" && "input[name*='card']")

যদিও আমি নিশ্চিত নই এটি কতটা অনুকূল।

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