2016-09-04 11 views
8

tôi phải lọc một danh sách các mục, có chứa hai dữ liệu quan trọng thuộc tính:Trộn logic AND và OR trong jQuery selector

<li class="song" data-title="freedom" data-id="7" data-tags="tag-18-eot,tag-2-eot" data-category="1">Freedom</li> 
  1. Thể loại
  2. Thẻ

Lọc theo thể loại phải theo logic HOẶC nhưng lọc theo thẻ phải theo logic AND.

Lọc bằng một trong hai cách này không phải là vấn đề.

tôi áp dụng, ví dụ:

$(collection).filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]'); 

để lọc theo các thẻ. Hoặc:

$(collection).filter('[data-category="1"], [data-category="2"]); 

để lọc theo danh mục.

Điều này hoạt động tốt. Tuy nhiên, tôi không thể tìm cách kết hợp hai bộ chọn này thành một truy vấn duy nhất mà tôi có thể chuyển đến hàm filter() và chuỗi hai cuộc gọi filter() không dẫn đến kết quả mong muốn, bởi vì cuộc gọi đầu tiên có thể lọc ra các mục mà thứ hai cuộc gọi sẽ bỏ lại phía sau.

Tôi đã tìm thấy this question với một chủ đề tương tự, nhưng vấn đề là hơi khác và cách tiếp cận là tốt.

Làm cách nào để lọc các mục đó một cách chính xác?

+1

Các bạn đã cố gắng đơn giản chaining với AND đầu tiên? –

+0

_chứa hai cuộc gọi filter() không dẫn đến kết quả mong muốn, bởi vì cuộc gọi đầu tiên có thể lọc ra các mục mà cuộc gọi thứ hai sẽ để lại phía sau._ Điều gì khiến bạn nghĩ vậy? – hindmost

+0

Không chắc chắn kết quả mong đợi là gì? Trả về tất cả các phần tử có thuộc tính 'data-tags' và' data-category' được đặt? – guest271314

Trả lời

6

Bạn sẽ có thể nhận được những gì bạn đang tìm kiếm với chuỗi, miễn là bạn sử dụng điều kiện AND trước tiên. Ví dụ:

var res = $('#collection li') 
    .filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]') 
    .filter('[data-category="1"], [data-category="2"]'); 

Fiddle here.

-2

chức năng lọc có thể nhận một chức năng như là đầu vào ...

Bạn có thể kết thúc với một cấu trúc như:

var set = $(collection).filter(
function(index, element) 
{ 
    return ($(element).attr(...) == "..."); 
} 
); 
+0

Tôi không nhận được downvote ... Tôi nghĩ rằng mục đích của trang web là để chỉ mọi người đi đúng hướng, không phải để làm công việc của họ cho họ. –

Các vấn đề liên quan