Câu trả lời:
Sử dụng dấu phẩy.
'.classA, .classB'
Bạn có thể chọn bỏ qua không gian.
AND
sẽ là .classA.classB
.
Sử dụng dấu phẩy có thể không đủ nếu bạn có nhiều đối tượng jQuery cần tham gia.
Phương thức .add () thêm các phần tử được chọn vào tập kết quả:
// classA OR classB
jQuery('.classA').add('.classB');
Nó dài dòng hơn '.classA, .classB'
, nhưng cho phép bạn xây dựng các bộ chọn phức tạp hơn như sau:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
Tôi đã viết một plugin cực kỳ đơn giản (5 dòng mã) cho chính xác chức năng này:
http://byrichardpowell.github.com/jquery-or/
Nó cho phép bạn nói một cách hiệu quả "lấy phần tử này hoặc nếu phần tử đó không tồn tại, hãy sử dụng phần tử này". Ví dụ:
$( '#doesntExist' ).or( '#exists' );
Trong khi câu trả lời được chấp nhận cung cấp chức năng tương tự như vậy, nếu cả hai bộ chọn (trước & sau dấu phẩy) tồn tại, cả hai bộ chọn sẽ được trả về.
Tôi hy vọng nó chứng minh hữu ích cho bất kỳ ai có thể truy cập trang này thông qua google.
"a" || "b"
vs. null || "b"
trong vanilla JS. Nếu chúng ta áp dụng hành vi tương tự ở đây, $(a).or(b)
nên trả lại $(a)
nếu nó tồn tại, nếu không nó sẽ quay trở lại $(b)
. Tôi không nghĩ có gì sai với danh pháp này, vì "hoặc" khớp với hành vi của JS "||" (hoặc) toán tử.
or
. Có gì khác đang nói về là giống như một concat
hoặc merge
hành động.
Nếu bạn đang tìm cách sử dụng cấu trúc tiêu chuẩn của phần tử = phần tử1 | | Element2 nơi JavaScript sẽ trả về cái đầu tiên là sự thật, bạn có thể làm chính xác điều đó:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
mà sẽ trả về phần tử đầu tiên thực sự được tìm thấy. Nhưng một cách tốt hơn có lẽ là sử dụng cấu trúc dấu phẩy của bộ chọn jQuery (trả về một mảng các phần tử được tìm thấy) theo cách này:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
Nó sẽ trả về phần tử tìm thấy đầu tiên.
Thỉnh thoảng tôi sử dụng nó để tìm một phần tử hoạt động trong danh sách hoặc một phần tử mặc định nếu không có phần tử hoạt động. Ví dụ:
element = $('ul#someList').find('li.active, li:first')[0]
sẽ trả lại bất kỳ li nào với một lớp hoạt động hoặc, nếu không có, sẽ chỉ trả lại li cuối cùng.
Hoặc là sẽ làm việc. Tuy nhiên, có những hình phạt hiệu suất tiềm năng là | | sẽ ngừng xử lý ngay khi nó tìm thấy điều gì đó trung thực trong khi cách tiếp cận mảng sẽ cố gắng tìm tất cả các phần tử ngay cả khi nó đã tìm thấy một phần tử. Sau đó, một lần nữa, bằng cách sử dụng | | cấu trúc có khả năng có thể có vấn đề về hiệu năng nếu nó phải trải qua một số bộ chọn trước khi tìm ra cái mà nó sẽ trả về, bởi vì nó phải gọi đối tượng jQuery chính cho mỗi cái (tôi thực sự không biết liệu đây có phải là hiệu năng hay không, nó chỉ có vẻ hợp lý mà nó có thể được). Tuy nhiên, nói chung, tôi sử dụng cách tiếp cận mảng khi bộ chọn là một chuỗi khá dài.
Daniel A. White Solution hoạt động tuyệt vời cho các lớp học.
Tôi đã có một tình huống mà tôi phải tìm các trường đầu vào như Donee_1_card trong đó 1 là một chỉ mục.
Giải pháp của tôi đã được
$("input[name^='donee']" && "input[name*='card']")
Mặc dù tôi không chắc nó tối ưu như thế nào.