2010-12-10 25 views
9

Aşağıdaki XML verildi:Bir jQuery öznitelik seçicisinde mantıksal VEYA mantıksal AND ile nasıl birleştirilir?

<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'yi kullanarak, erkek ve CA veya NV'den olan, ancak filtre işlevini kullanmadan kullanıcıları seçmek için bir yol var mı? Açık olmak gerekirse,

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

sadece erkek kullanıcıları seçerken,

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

ise tüm kullanıcıları CA veya NV'den seçer. Ancak, her ikisini de mantıklı bir AND ile tek bir seçicide birleştiremiyorum.

Filtre işlevini kullanarak, şu işlemleri yapar:

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

Teşekkürler!

cevap

19

bu deneyin: Temelde

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

Eğer sex ve state (bu senin mantıksal AND olacaktır) ve devletin başına bir kez bunları tekrar (ve bu mantıklı olurdu tek basit seçicinin araya niteliklerini zinciri VEYA).

Testi:

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

Çıktı:

Max - CA 
Bob - NV 
Jon - CA 
+0

İşleri, teşekkürler! – user537264

+0

Bu tekrarlanır, ancak seçmenleri tek başına kullanabildiği kadarıyla, budur. En beğendiğiniz cevabı kabul etmek için onay işaretini tıkladığınızdan emin olun. – BoltClock

+0

Tüm seçmen kuralları css grammarını takip eder http://www.w3.org/TR/CSS2/grammar.html – Incognito

1

Birden seçicileri birleştirebilirsiniz, ancak sözdizimi tam olarak doğru değil:

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

Bunların hepsi < kullanıcıyı bulur > "CA" durumu ve diğer tüm düğümlerle (değil)kullanici >) "NV" durumu ile. İstediğin geçerli:

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

kendini tekrarlamak istemiyorsanız: Büyü gibi

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

Sözdizimi hakkında açıklama için teşekkürler. Bunu fark etmedim. – user537264

İlgili konular