In a library I am using I have the task of moving an element to the front of the dom when it is hovered over. (I make it bigger so I need to see it, then shrink it back when
I modified @galambalazs' answer because I found that it failed if I hovered really quickly over the li elements, as some of the elements would still retain the mouseover effect.
I came up with a solution that removes the hover state on elements that failed to trigger the mouseover event by pushing these elements to a stack whenever the mouseover even is triggered. Anytime either the mouseover or mouseout event is called, I pop the elements from this array and remove the styles placed on it:
$(function(){
// Track any hovered elements
window.hovered = [];
$("li").mouseover(function() {
// make sure that these actions happen only once
if ( $(this).css("border-color") != "red" ) {
resetHovered (); // Reset any previous hovered elements
$(this).css("border-color","red");
this.parentNode.appendChild(this);
hovered.push(this);
}
});
$("li").mouseout(function(){
resetHovered(); // Reset any previous hovered elements
});
// Reset any elements on the stack
function resetHovered () {
while ( hovered.length > 0 ) {
var elem = hovered.pop();
$(elem).css("border-color","black");
}
}
});
I've tested this solution with IE 11. A functional example can be found here.