2011-01-17 18 views
11

मैं JQuery में एक if/else कथन लिखने की कोशिश कर रहा हूं जो 'IN' या 'OUT' (इस मामले में) से मेल करके किसी तत्व की कक्षा को बदल सकता है।JQuery यदि/वाइल्डकार्ड सीएसएस नाम से मेल खाता है

उदाहरण के लिए, मैं class='IN-something' या class='OUT-something' के साथ कई <DIV> है।

यदि मैं सटीक सीएसएस वर्ग जानता था, तो नीचे काम करेगा, लेकिन मुझे पता चलेगा कि इसमें 'आईएन' या 'आउट' है।

तो कुछ इस तरह:

if ($(jRow).hasClass('IN-*')) 
{jRow.attr("class", "OUT-foo");} 
else 
{jRow.attr("class", "IN-foo");} 

विचार? धन्यवाद!

उत्तर

7
if ($(jRow).attr('class').indexOf('IN-') !== 1) 
    {jRow.attr("class", "OUT-foo");} 
else 
    {jRow.attr("class", "IN-foo");} 
+0

चूंकि आप केवल बुलियन प्रतिक्रिया चाहते हैं, 'खोज' यहां उचित विधि है। हालांकि, इस मामले में आपका दृष्टिकोण ठीक काम करेगा, जब तक मिलान की गई स्ट्रिंग को सत्य का मूल्यांकन करना जारी रहेगा। –

+0

नीचे वोट क्यों? – Sarfraz

+0

सहमत ... यह जवाब पूरी तरह वैध है (जैसा मेरा है), और हम दोनों ने वोट कम कर दिए। मैंने सर्फ्राज़ को वोट दिया। मुझे संदेह है कि कोई (श्री केंडल?) थोड़ा प्रतिस्पर्धी है। –

0
var class = $(jRow).attr('class'); 
if (class.search("IN\-.*")) { 
    jRow.attr("class", "OUT-foo"); 
} 
else { 
    jRow.attr("class", "IN-foo"); 
} 
+0

वास्तव में? दो नीचे वोट, सिर्फ लड़के के वास्तविक प्रश्न का सही जवाब देने के लिए? –

+0

+1 वैध जवाब – hunter

+1

ठीक है, अगर तुम downvotes मिलता है, पर विचार निम्नलिखित हैं: 1. ([खोज और indexOf के बीच का अंतर] http://stackoverflow.com/questions/354110/in-javascript-what-is-the- अंतर-बीच-सूचकांक-और-खोज) -> अनुक्रमणिकाऑफ यहां अधिक उपयुक्त है क्योंकि हमें यहां रेगेक्स की आवश्यकता नहीं है। 2. खोज रिटर्न -1 नहीं मिला और -1 बूलियन में परिवर्तित हो गया है, इसलिए आपका जवाब कभी काम नहीं कर सकता है। 3. नियमित अभिव्यक्तियों में हाइफ़न से बचने की आवश्यकता नहीं होती क्योंकि बाहरी चरित्र वर्गों के पास उनका विशेष अर्थ नहीं होता है। 3 त्रुटियों और बेहतर उत्तरों के साथ आप अपने उत्तर को हटाने से बेहतर होंगे। – nus

1

उपयोग jQuery डेटा "में" या "बाहर" की दुकान, या एक व्यापार-तर्क-उपयुक्त नाम है कि "में" या "बाहर" कहते हैं के साथ अपने स्वयं की एक विशेषता जोड़ने के लिए। असली समस्या यहां कक्षा नामों का संयोजन कर रही है।

आप IN और OUT को भी तोड़ सकते हैं और एकाधिक कक्षाओं का उपयोग कर सकते हैं।

<tr class = "IN foo"/>

if($obj.hasClass("in")){ $obj.removeClass("in").addClass("out") } 
+2

वास्तव में? दो वैध उत्तरों के लिए नीचे वोट, बस अपना प्रचार करने के लिए? आ जाओ। –

+2

मैंने वोट कम नहीं किया लेकिन "आप इसे गलत कर रहे हैं" कभी भी मददगार नहीं है – hunter

+0

@ डोरोक्यूड्यूड - आप कैसे बता सकते हैं कि किसने डाउनवॉट किया? बस सोच रहा है ... मैं हर किसी को वोट दूंगा ताकि वे अपने काल्पनिक बिंदुओं पर चिल्ला रहे हों! – hunter

7

आप attribute-contains-prefix-selector(docs) उपयोग कर सकते हैं कि अगर पूरी क्लास मूल्य होगा (या कम से कम है कि प्रथम श्रेणी के है)

if ($(jRow).is('[class |= IN]')) { 

यह भी अगर jRow एक मैच देखने के लिए is()(docs) विधि का उपयोग करता।

Click here to test a working example.(jsFiddle)


संपादित करें:

यदि आपका बिंदु था आप जानते हैं कि नहीं क्या foo है, और आप मुझे यह बजाय की तरह कुछ करना चाहते हैं यह बनाए रखने के लिए की जरूरत है,:

jRow.attr('class', function(i,cls) { 
    return cls.indexOf('IN') > -1 ? cls.replace('IN','OUT') : cls.replace('OUT','IN'); 
}); 

आप attr()(docs) विधि से पीछे तर्क के रूप में एक समारोह पारित कर सकते हैं। उस समारोह में 2 पैरामीटर हैं। पहला पुनरावृत्ति में वर्तमान सूचकांक है। दूसरा विशेषता का वर्तमान मूल्य है।

वापसी मूल्य वह मान है जो सेट किया जाएगा।

+1

+1 जो स्मार्ट है :) – Sarfraz

+0

वी चालाक - मेरे ऐप में मैं इस मामले में उद्देश्य पर 'foo' को बदल रहा हूं, लेकिन यह कोड का एक उपयोगी बिट है। – Neokoenig

संबंधित मुद्दे