jQuery, AND ve OR operatörlerini kullanarak özniteliğe göre seçim yapın


105

JQuery'de AND ve OR kullanarak adlandırılmış özniteliklere göre öğeler seçmenin mümkün olup olmadığını düşünüyorum.

Misal:

<div myid="1" myc="blue">1</div>
<div myid="2" myc="blue">2</div>
<div myid="3" myc="blue">3</div>
<div myid="4">4</div>

myc="blue"Sadece myid1 veya 3'e ayarlanmış olanlar hariç tüm öğeleri seçmek istiyorum .

Ben de denedim:

a=$('[myc="blue"] [myid="1"]  [myid="3"]');

ama burada aynı şekilde çalışmıyor:

a=$('[myc="blue"] && [myid="1"] || [myid="3"]');

Özel filtre fonksiyonları yazmadan mümkün müdür?


7
NB: mycve gibi kendi niteliklerinizi oluşturmamalısınız myid. HTML5 kullanıyorsanız, bunların önüne data-: data-mycve data-myid.
RoToRa

@RoToRa, HTML5'te bunu yapmanız gerektiğini söyleyen belgeler var mı? Gördüğüm çoğu web sitesi, geliştiricinin beyninin o sırada ne düşündüğünü kullanıyor ...
Alexis Wilke

1
İnsanlar bunu yapıyor diye doğru olduğu anlamına gelmez. HTML5 Bölüm 3.2.1'e bakın : "Yazarlar, bu spesifikasyon veya diğer geçerli spesifikasyonlar tarafından izin verilmeyen unsurları, nitelikleri veya nitelik değerlerini kullanmamalıdır, çünkü bunu yapmak, dilin gelecekte genişletilmesini önemli ölçüde zorlaştırır."
RoToRa

1
Bu, iyi bir sorunun kötü bir örneğidir. Peki ya girdiler gibi farklı öğe türleri?
jesus g_force Harris

Yanıtlar:


193

VE operasyon

a=$('[myc="blue"][myid="1"][myid="3"]');

OR işlemi, virgül kullanın

a=$('[myc="blue"],[myid="1"],[myid="3"]');

@Vega'nın yorumladığı gibi:

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');

1
Sanırım, o istiyormyc == blue && (id == 1 || id == 3)
Selvakumar Arumugam

2
kullanırsam a=$('[myc="blue"] [myid="1"],[myid="3"]');bu anlama geliyor mu ([myc="blue"] AND [myid="1"]) OR [myid="3"]yoksa ([myc="blue"]) AND ([myid="1"] OR [myid="3"]) 2. olanı arıyorum // Düzenle: bu güncelleme için teşekkür ederim! :-)
The Bndr


10

Aşağıdaki gibi bir filtre yazmaya ne dersiniz?

$('[myc="blue"]').filter(function () {
   return (this.id == '1' || this.id == '3');
});

Düzenleme: @ Jack Teşekkürler .. tamamen kaçırdım ..

$('[myc="blue"]').filter(function() {
   var myId = $(this).attr('myid');   
   return (myId == '1' || myId == '3');
});

DEMO


5

Bir seçicideki ve operatörü yalnızca boş bir dizedir ve veya operatörü virgüldür.

Ancak gruplama veya öncelik yoktur, bu nedenle koşullardan birini tekrarlamanız gerekir:

a=$('[myc=blue][myid="1"],[myc=blue][myid="3"]');

bu alıntılara ihtiyacın var mı? Yani sadece tutarlılık için .. muhtemelen sadece ben. >. <
Selvakumar Arumugam

1
@Vega: Gibi basit dizeler için alıntılara ihtiyacınız yok blueama sayısal değerlerden emin değildim, bu yüzden onları sakladım.
Guffa

5

Önce tüm durumlarda ortaya çıkan durumu bulun, ardından özel koşulları filtreleyin:

$('[myc="blue"]')
    .filter('[myid="1"],[myid="3"]');

1

Sizin özel durumunuzda

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');

0

JQuery, öğeleri seçmek için CSS seçicileri kullanır, bu nedenle, aşağıdaki gibi, virgülle ayırarak birden fazla kuralı kullanmanız gerekir:

a=$('[myc="blue"], [myid="1"], [myid="3"]');

Düzenle:

Üzgünüm, mavi ve 1 veya 3'ü istediniz. Peki ya:

a=$('[myc="blue"][myid="1"],  [myid="3"]');

İki öznitelik seçiciyi bir araya getirmek size VE verir, virgül kullanmak size OR verir.


1
Sanırım, o istiyormyc == blue && (id == 1 || id == 3)
Selvakumar Arumugam

[myc="blue"]İkinci örnekteki seçiciyi tekrarlamanız gerekir .
RoToRa

-1

Öğeleri, belirttiğiniz mantıksal işlemleri kullanarak doğru bir şekilde seçmek jQuery.filter()için, AND"özel filtre işlevlerine" değil, yalnızca işleme ihtiyacınız vardır . Ayrıca ihtiyaç jQuery.add()için ORoperasyon.

var elements = $('[myc="blue"]').filter('[myid="1"').add('[myid="3"');

Alternatif olarak, seçicilerin sıkışmasının birlikte olduğu ANDve virgülle ayırmanın aşağıdaki gibi davrandığı tek bir seçicide steno kullanmayı başarmak da mümkündür OR:

var elements = $('[myc="blue"][myid="1"], [myid="3"]');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.