2012-05-21 24 views
73

Tôi đang nghĩ đến, nếu có thể trong jQuery để chọn các phần tử theo các thuộc tính được đặt tên bằng cách sử dụng AND và OR.jQuery chọn theo thuộc tính bằng cách sử dụng toán tử AND và OR

Ví dụ:

<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> 

Tôi muốn chọn tất cả các yếu tố mà myc="blue" nhưng chỉ những người có myid thiết lập để 1 hoặc 3.

Vì vậy, tôi đã cố gắng:

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

nhưng không hoạt động, tương tự tại đây:

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

Có thể không có chức năng lọc đặc biệt không?

+6

NB: Bạn không nên chiếm các thuộc tính của riêng bạn như 'myc' và 'myid'. Nếu bạn đang sử dụng tiền tố HTML5 chúng với 'data-': 'data-myc' và' data-myid'. – RoToRa

+0

wow, 8 câu trả lời trong 10 phút .. có vẻ như tôi đã hỏi một câu hỏi noob. lấy làm tiếc! : -/ –

+1

@ TheBndr Không, đó là một câu hỏi thú vị và hầu hết các câu trả lời đều có cách tiếp cận khác nhau và câu hỏi của bạn có 3 upvotes + 2 fav .. chắc chắn là một câu hỏi hay. –

Trả lời

132

hoạt động

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

HOẶC hoạt động, sử dụng dấu phẩy

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

Như @Vega nhận xét:

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

Tôi nghĩ, anh ta muốn 'myc == blue && (id == 1 || id == 3)' –

+1

nếu tôi sử dụng 'a = $ ('[myc =" blue "] [myid =" 1 "] , [myid = "3"] '); 'có nghĩa là' ([myc = "blue"] AND [myid = "1"]) HOẶC [myid = "3"] 'hoặc' ([myc = "màu xanh "]) AND ([myid =" 1 "] HOẶC [myid =" 3 "])' Tôi đang tìm phần thứ hai // Chỉnh sửa: cảm ơn bạn đã cập nhật! :-) –

11

Làm thế nào về cách viết một bộ lọc như dưới đây,

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

Edit: @Jack Cảm ơn .. hoàn toàn bị mất nó ..

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

DEMO

+0

Đó là 'myid', không phải' id' :) –

+0

@Jack Hoàn toàn bỏ lỡ điều đó .. Cảm ơn bạn! –

-1

JQuery sử dụng bộ chọn CSS để chọn các yếu tố, vì vậy bạn chỉ cần sử dụng nhiều hơn một quy tắc bởi tách chúng bằng dấu phẩy, như vậy:

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

Chỉnh sửa:

Xin lỗi, bạn muốn màu xanh và 1 hoặc 3. Làm thế nào về:

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

Đưa hai bộ chọn thuộc tính cùng nhau mang đến cho bạn AND, sử dụng dấu phẩy mang đến cho bạn OR.

+1

Tôi nghĩ, anh ấy muốn 'myc == blue && (id == 1 || id == 3)' –

+0

Cảm ơn Vega, đã cập nhật. – philnash

+0

Bạn cần phải lặp lại bộ chọn '' myc = "blue"] 'trong ví dụ thứ hai. – RoToRa

-1

Để chọn đúng các yếu tố sử dụng các phép toán logic mà bạn đã nêu, bạn chỉ cần jQuery.filter() cho hoạt động AND, không phải là "chức năng bộ lọc đặc biệt". Bạn cũng cần jQuery.add() cho hoạt động OR.

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

Ngoài ra, nó có thể thực hiện bằng cách viết tắt trong một selector duy nhất, nơi gây nhiễu selectors cùng nhau hoạt động như một AND và tách với một hành vi dấu phẩy như một OR:

var elements = $('[myc="blue"][myid="1"], [myid="3"]'); 
5

Các và nhà điều hành trong bộ chọn chỉ là một chuỗi rỗng, và toán tử hoặc là dấu phẩy. Tuy nhiên

Không có nhóm hoặc ưu tiên, vì vậy bạn phải lặp lại một trong các điều kiện:

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

bạn có cần báo giá không? Tôi có nghĩa là chỉ cho sự nhất quán .. có lẽ chỉ là tôi. >. < –

+1

@Vega: Bạn không cần báo giá cho các chuỗi đơn giản như 'blue', nhưng tôi không chắc chắn về giá trị số, vì vậy tôi giữ chúng. – Guffa

1

Trong trường hợp đặc biệt của bạn nó sẽ là

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

sử dụng đơn giản .filter()[docs] (AND) sử dụng số multiple selector[docs] (OR):

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

Nói chung, bộ chọn chuỗi, li ke a.foo.bar[attr=value] là một số loại AND chọn.

jQuery có extensive documentation về bộ chọn được hỗ trợ, nó đáng để đọc.

+0

Bạn có biết, nếu điều này nhanh hơn câu trả lời từ gabe? –

+0

Tôi không biết, có lẽ, có thể không. –

5

Đầu tiên tìm ra điều kiện xảy ra trong mọi tình huống, sau đó lọc các điều kiện đặc biệt:

$('[myc="blue"]') 
    .filter('[myid="1"],[myid="3"]'); 
Các vấn đề liên quan