Bản gốc (Và đúng) Trả lời:
Bạn có thể sử dụng is()
và kiểm tra bộ chọn :hover
.
var isHovered = $('#elem').is(":hover"); // returns true or false
Ví dụ: http://jsfiddle.net/Meligy/2kyaJ/3/
(Điều này chỉ hoạt động khi bộ chọn khớp tối đa MỘT phần tử. Xem Chỉnh sửa 3 để biết thêm)
.
Chỉnh sửa 1 (ngày 29 tháng 6 năm 2013): (Chỉ áp dụng cho jQuery 1.9.x, vì nó hoạt động với 1.10+, xem Chỉnh sửa tiếp theo 2)
Câu trả lời này là giải pháp tốt nhất tại thời điểm câu hỏi được trả lời. Công cụ chọn ': hover' này đã bị xóa bằng cách .hover()
xóa phương thức trong jQuery 1.9.x.
Điều thú vị là một câu trả lời gần đây của "allicarn" cho thấy có thể sử dụng :hover
làm bộ chọn CSS (so với Sizzle) khi bạn đặt tiền tố với bộ chọn$($(this).selector + ":hover").length > 0
và có vẻ như nó hoạt động!
Ngoài ra, plugin hoverIntent được đề cập trong một câu trả lời khác trông cũng rất đẹp.
Chỉnh sửa 2 (ngày 21 tháng 9 năm 2013): .is(":hover")
tác phẩm
Dựa trên một nhận xét khác tôi đã nhận thấy rằng cách ban đầu tôi đã đăng .is(":hover")
, thực sự vẫn hoạt động trong jQuery, vì vậy.
Nó hoạt động trong jQuery 1.7.x.
Nó đã ngừng hoạt động vào 1.9.1, khi ai đó báo cáo với tôi và tất cả chúng tôi đều nghĩ rằng nó có liên quan đến việc jQuery xóa hover
bí danh để xử lý sự kiện trong phiên bản đó.
Nó đã hoạt động trở lại trong jQuery 1.10.1 và 2.0.2 (có thể là 2.0.x), điều này cho thấy rằng lỗi trong 1.9.x là một lỗi hoặc do đó không phải là hành vi có chủ ý như chúng ta đã nghĩ ở điểm trước.
Nếu bạn muốn kiểm tra điều này trong một phiên bản jQuery cụ thể, chỉ cần mở ví dụ JSFidlle ở đầu câu trả lời này, thay đổi thành phiên bản jQuery mong muốn và nhấp vào "Chạy". Nếu màu thay đổi khi di chuột, nó hoạt động.
.
Chỉnh sửa 3 (ngày 9 tháng 3 năm 2014): Nó chỉ hoạt động khi chuỗi jQuery chứa một phần tử duy nhất
Như được thể hiện bởi @Wilmer trong các bình luận, anh ta có một câu đố thậm chí không hoạt động đối với các phiên bản jQuery mà tôi và những người khác ở đây đã thử nghiệm nó. Khi tôi cố gắng tìm những gì đặc biệt về trường hợp của anh ấy, tôi nhận thấy rằng anh ấy đang cố kiểm tra nhiều yếu tố cùng một lúc. Đây là némUncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.
Vì vậy, làm việc với fiddle của mình, điều này KHÔNG hoạt động:
var isHovered = !!$('#up, #down').filter(":hover").length;
Trong khi điều này không làm việc:
var isHovered = !!$('#up,#down').
filter(function() { return $(this).is(":hover"); }).length;
Nó cũng hoạt động với các chuỗi jQuery có chứa một phần tử, như nếu bộ chọn ban đầu chỉ khớp với một phần tử hoặc nếu bạn gọi .first()
kết quả, v.v.
Điều này cũng được tham khảo tại Bản tin Tài nguyên & Mẹo dành cho Web + của tôi .