Использование функции reshape
:
reshape(dat1, idvar = "name", timevar = "numbers", direction = "wide")
Исходный (и правильный) Ответ:
Вы можете использовать is()
и проверить селектор :hover
.
var isHovered = $('#elem').is(":hover"); // returns true or false
Пример: http: / /jsfiddle.net/Meligy/2kyaJ/3/
(Это работает только тогда, когда селектор соответствует максимальному элементу ONE).
.
Редактировать 1 (29 июня 2013 г.): (применимо только к jQuery 1.9.x, поскольку оно работает с 1.10+, см. следующий Редактировать 2)
Этот ответ был лучшим решением на время ответа на вопрос. Этот селектор «: hover» был удален с удалением метода .hover()
в jQuery 1.9.x.
Интересно, что недавний ответ «allicarn» показывает, что можно использовать :hover
в качестве селектора CSS (vs. Sizzle), когда вы префикс его с помощью селектора $($(this).selector + ":hover").length > 0
, и, похоже, он работает!
Кроме того, плагин hoverIntent , упомянутый в другом ответе, также выглядит очень красивым.
Редактировать 2 (21 сентября 2013 г.): .is(":hover")
works
Основываясь на другом комментарии, я заметил, что исходный способ, который я опубликовал, .is(":hover")
, на самом деле все еще работает в jQuery, поэтому .
hover
для обработки событий в этой версии. Если вы хотите проверить это в q частности jQuery, просто откройте пример JSFidlle в начале этого ответа, измените желаемую версию jQuery и нажмите «Запустить».
Как показано @Wilmer в комментариях, у него есть скрипка, которая даже не работает против jQuery версий I и других, которые протестировали ее. Когда я попытался найти, что особенного в его случае, я заметил, что он пытался проверить несколько элементов за раз. Это метало Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.
Итак, работая со своей скрипкой, это НЕ работает:
var isHovered = !!$('#up, #down').filter(":hover").length;
Пока это работает:
var isHovered = !!$('#up,#down').
filter(function() { return $(this).is(":hover"); }).length;
Он также работает с последовательностями jQuery, которые содержат один элемент, например, если исходный селектор соответствовал только одному элементу или вы вызывали .first()
по результатам и т. Д.
Это также упоминается в моей JavaScript + Web Dev Tips & amp; Ресурсный бюллетень .
Это не работает в jQuery 1.9. Сделал этот плагин на основе ответа user2444818.
jQuery.fn.mouseIsOver = function () {
return $(this).parent().find($(this).selector + ":hover").length > 0;
};
Пара обновлений для добавления после работы над этой темой на некоторое время:
Мы использовали hoverIntent https://github.com/briancherne/jquery-hoverIntent , чтобы решить проблему для нас. По сути, это срабатывает, если движение мыши более преднамеренное. (одна вещь, которую следует отметить, это то, что она будет запускаться на обеих мышах, введя элемент и уходя - если вы только хотите использовать один проход конструктора пустую функцию)
Расширение ответа @ Мохамеда. Вы можете использовать небольшую инкапсуляцию
Как это:
jQuery.fn.mouseIsOver = function () {
if($(this[0]).is(":hover"))
{
return true;
}
return false;
};
Использовать его как:
$("#elem").mouseIsOver();//returns true or false
Спрятать скрипку : http://jsfiddle.net/cgWdF/1/
Принятый ответ не работал для меня в JQuery 2.x .is(":hover")
возвращает false для каждого вызова.
Я закончил с довольно простым решением, которое работает:
function isHovered(selector) {
return $(selector+":hover").length > 0
}
Установите флаг при наведении:
var over = false;
$('#elem').hover(function() {
over = true;
},
function () {
over = false;
});
Затем просто проверьте свой флаг.
mouseleave
один элемент, я хочу проверить, указала ли мышь другой конкретный элемент.
– James Skidmore
24 January 2012 в 05:01
e.fromElement
и e.toElement
. Будет ли это работать на вас?
– mrtsherman
24 January 2012 в 05:03
.data()
.
– nnnnnn
24 January 2012 в 05:03
Вы можете отфильтровать свой элемент из всех зависающих элементов. Проблемный код:
element.filter(':hover')
Сохранить код:
jQuery(':hover').filter(element)
Чтобы вернуть логическое значение:
jQuery(':hover').filter(element).length===0
Мне нравится первый ответ, но для меня это странно. При попытке проверить сразу после загрузки страницы для мыши я должен установить как минимум 500 миллисекундную задержку для ее работы:
$(window).on('load', function() {
setTimeout(function() {
$('img:hover').fadeOut().fadeIn();
}, 500);
});
Установка флага на ответ кинакуты кажется разумной, вы можете поместить слушателя на тело, чтобы вы могли проверить, не завис ли какой-либо элемент в определенный момент.
Однако, как вы хотите иметь дело с дочерними узлами? Вы должны, возможно, проверить, является ли этот элемент предком текущего зависающего элемента.
<script>
var isOver = (function() {
var overElement;
return {
// Set the "over" element
set: function(e) {
overElement = e.target || e.srcElement;
},
// Return the current "over" element
get: function() {
return overElement;
},
// Check if element is the current "over" element
check: function(element) {
return element == overElement;
},
// Check if element is, or an ancestor of, the
// current "over" element
checkAll: function(element) {
while (overElement.parentNode) {
if (element == overElement) return true;
overElement = overElement.parentNode;
}
return false;
}
};
}());
// Check every second if p0 is being hovered over
window.setInterval( function() {
var el = document.getElementById('p0');
document.getElementById('msg').innerHTML = isOver.checkAll(el);
}, 1000);
</script>
<body onmouseover="isOver.set(event);">
<div>Here is a div
<p id="p0">Here is a p in the div<span> here is a span in the p</span> foo bar </p>
</div>
<div id="msg"></div>
</body>
Использование:
var hovered = $("#parent").find("#element:hover").length;
jQuery 1.9 +
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
. – RobG 24 January 2012 в 07:06is(":hover")
, похоже, снова работает в jQuery 2.0.2 ... – Ivo Renkema 20 September 2013 в 08:39