2009-12-22 27 views
129

Tôi có một số liên kết mà tôi muốn chọn lớp và id cùng một lúc.jQuery: chọn lớp và id của phần tử cùng một lúc?

Điều này là do tôi có 2 hành vi khác nhau. Khi một lớp liên kết có một tên lớp mà chúng hoạt động theo một cách, khi cùng một nhóm liên kết có một tên lớp khác, chúng hoạt động khác nhau. Các tên lớp được chuyển đổi với jquery.

Vì vậy, tôi phải có thể chọn một lớp liên kết VÀ id cùng một lúc. Điều này có thể không?

Tôi đã thử:

$("a .save #country") 

mà không cần bất kỳ kết quả.

Trả lời

235

Bạn có thể làm:

$("#country.save")... 

HOẶC

$("a#country.save")... 

HOẶC

$("a.save#country")... 

như bạn thích.

Vì vậy, có bạn có thể chỉ định công cụ chọn phải khớp với ID lớp (và có khả năng gắn thẻ tên và bất kỳ thứ gì khác bạn muốn ném vào).

+23

Vì vậy, về cơ bản nó giống như: $ ("# a .b") có nghĩa là phần tử với lớp b bên trong phần tử có id a. $ ("# a.b") nghĩa là phần tử có lớp b và id a. Bí quyết là khoảng cách giữa #a và .b –

+8

Phải cẩn thận khi bạn sử dụng bộ chọn id trước khi lớp khác nếu nó không hoạt động. Ví dụ: $ (". Save # country") ... không trả lại kết quả. – slotomo

0

Làm thế nào về mã này?

$("a.save#country") 
+0

vội vàng tôi đã bỏ phiếu sai về câu trả lời này. Xin lỗi ... – devundef

0
$("a.save, #country") 

sẽ chọn cả hai lớp "a.save" và "nước" id.

7

Nó sẽ làm việc khi thêm khoảng trống giữa id và class định danh

$("#countery .save")...

+1

thực sự điều này làm việc cho tôi, vì nó không hoạt động như $ ('# countery.save') nên cảm ơn bạn! – Nikola

+0

Tôi đã tìm thấy đôi khi nó cầu kỳ về không gian. như $ (. selector> .item # id) hoạt động, nhưng $ (. selector> .item #id) thì không. –

+14

Không gian là * bộ chọn con cháu *, tức là 'A B' có nghĩa là" So khớp tất cả các phần tử phù hợp với B là phần tử con của các phần tử khớp với A ". 'AB' có nghĩa là" chọn tất cả phần tử khớp với A và B ". Vì vậy, nó thực sự phụ thuộc vào những gì bạn muốn đạt được. '# countery.save' và' #countery .save' không tương đương. –

32

Chỉ cần thêm rằng câu trả lời rằng Alex với điều kiện làm việc cho tôi, và không phải là một trong đó là nhấn mạnh như một câu trả lời.

Cái này không làm việc cho tôi

$('#country.save') 

Nhưng lần này đã làm:

$('#country .save') 

để kết luận tôi là sử dụng không gian. Bây giờ tôi không biết nếu nó là phiên bản mới của jQuery mà tôi đang sử dụng (1.5.1), nhưng dù sao hy vọng điều này sẽ giúp cho bất cứ ai có vấn đề tương tự mà tôi đã có.

chỉnh sửa: tín dụng đầy đủ cho lời giải thích (trong bình luận cho câu trả lời của Alex) đi vào Felix Kling người nói:

Không gian là selector hậu duệ, tức là AB có nghĩa là "trận đấu tất cả các yếu tố mà trận B đó là hậu duệ của các phần tử khớp với A ". AB nghĩa là "chọn tất cả các thành phần khớp với A và B". Vì vậy, nó thực sự phụ thuộc vào những gì bạn muốn đạt được. #country.save#country .save không tương đương.

+2

Có phải vấn đề mà bạn đã nói "phản đối" thay vì "quốc gia" không? – amindfv

1

Cuối cùng, các quy tắc tương tự như đối với css được áp dụng.

Vì vậy, tôi nghĩ rằng this reference có thể là một số sử dụng có giá trị.

+0

Bạn có thể tóm tắt nội dung tham chiếu của mình không? – krlmlr

+0

Thực ra, theo http://api.jquery.com/category/selectors/ jQuery có một số bộ chọn của riêng nó; Ngoài ra, nó không thực sự nói rằng tất cả các bộ chọn CSS 1-3 được hỗ trợ ... – SamB

+0

@ SamB Bạn nói đúng nhưng, nó nói nó _borrows_ từ CSS 1-3 VÀ thêm riêng của nó. Tôi vẫn nghĩ rằng liên kết đến các công cụ W3C là hợp lệ để thảo luận này. – akousmata

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