2010-12-10 22 views
9

निम्नलिखित XML को देखते हुए:मैं लॉजिकल या लॉजिकल के साथ और एक jQuery विशेषता चयनकर्ता के भीतर कैसे गठबंधन करूं?

<users> 
    <user state="CA" sex="m">Max</user> 
    <user state="AZ" sex="f">Jen</user> 
    <user state="OR" sex="f">Kim</user> 
    <user state="NV" sex="m">Bob</user> 
    <user state="CA" sex="m">Jon</user> 
    <user state="AZ" sex="m">Jim</user> 
    <user state="OR" sex="f">Joy</user> 
    <user state="NV" sex="f">Amy</user> 
</users> 

jQuery का उपयोग करना, क्या ऐसे पुरुष चुनने का कोई तरीका है जो पुरुष हैं और सीए या एनवी से हैं, लेकिन फिल्टर फ़ंक्शन का उपयोग किए बिना? स्पष्ट होने के लिए, मुझे पता है कि

$(xml).find("user[sex='m']") 

केवल पुरुष उपयोगकर्ताओं का चयन करता है, जबकि

$(xml).find("user[state='CA'],[state='NV']") 

या तो सीए या एनवी से सभी उपयोगकर्ताओं का चयन करता है। लेकिन मैं दोनों को तार्किक और एक चयनकर्ता के भीतर गठबंधन करने में सक्षम नहीं हूं।

फ़िल्टर फ़ंक्शन का उपयोग करते हुए, निम्न कार्य करता है:

$(xml).find("user").filter(function() { 
    return $(this).attr('sex') == 'm' && ($(this).attr('state') == 'CA' || $(this).attr('state') == 'NV') 
}).each(function() { 
    alert($(this).text()); 
}); 

धन्यवाद!

उत्तर

19

इस प्रयास करें:

$(xml).find("user[sex='m'][state='CA'], user[sex='m'][state='NV']") 

मूल रूप से आप श्रृंखला sex और state एक भी सरल चयनकर्ता में एक साथ जिम्मेदार बताते हैं (यह आपकी तार्किक और होगा), और उन्हें राज्य में एक बार दोहराने (और यह अपने तार्किक होगा या)।

टेस्ट:

$(xml).find("user[sex='m'][state='CA'], user[sex='m'][state='NV']") 
     .each(function() { 
      alert($(this).text() + " - " + $(this).attr('state')); 
     }); 

आउटपुट:

Max - CA 
Bob - NV 
Jon - CA 
+0

वर्क्स एक आकर्षण की तरह है, धन्यवाद! – user537264

+0

यह दोहराया जाता है, लेकिन जहां तक ​​चयनकर्ता अकेले जाते हैं, यह है। आपको सबसे अच्छा जवाब देने के लिए चेक मार्क पर क्लिक करना सुनिश्चित करें। – BoltClock

+0

सभी चयनकर्ता नियम सीएसएस व्याकरण का पालन करते हैं http://www.w3.org/TR/CSS2/grammar.html – Incognito

1

आप एक से अधिक चयनकर्ताओं को जोड़ सकते हैं, लेकिन अपने वाक्य रचना वास्तव में सही नहीं है:

$(xml).find("user[state='CA'],[state='NV']") 

यह सब < उपयोगकर्ता पाता > राज्य "सीए" और किसी भी अन्य नोड्स के साथ तत्व (आवश्यक नहीं < उपयोगकर्ता >) राज्य "एनवी" के साथ। क्या आप चाहते हैं:

$(xml).find("user[state=CA][sex=m],user[state=NV][sex=m]") 

आप अपने आप को दोहराने के लिए नहीं करना चाहते हैं:

$(xml).find("user").filter("[state='CA'],[state='NV']").filter("[sex='m']"); 
+0

वाक्यविन्यास के बारे में स्पष्टीकरण के लिए धन्यवाद। मुझे यह महसूस नहीं हुआ कि। – user537264

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