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 mouse out).
The library I am using has neat solution which uses appendChildren
on the active element to move it to the end its parent so further towards the end of the dom and in turn on top.
The problem is I believe that because the element you are moving is the one you are hovering over the mouseout
event is lost. Your mouse is still over the node but the mouseout
event isn't being fired.
I have stripped the functionality down to confirm the issue. It works fine in Firefox but not in any version of IE. I'm using jQuery here for speed. Solutions can be in plain old Javascript, which would be a preference as it might need to go back up stream.
I can't use z-index here as the elements are vml, the library is Raphael and I am using the toFront
call. Sample using ul/li to show issue in a simple example
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="js/jquery.min.js" type="text/javascript"></script>
<style>
li
{
border:1px solid black;
}
</style>
</head>
<body>
<ul><li>Test 1</li></ul>
<ul><li>Test 2</li></ul>
<ul><li>Test 3</li></ul>
<ul><li>Test 4</li></ul>
<script>
$(function(){
$("li").mouseover(function(){
$(this).css("border-color","red");
this.parentNode.appendChild(this);
});
$("li").mouseout(function(){
$(this).css("border-color","black");
});
});
</script>
</body>
</html>
Edit: Here is a link to a js paste bin to see it in action. http://jsbin.com/obesa4
**Edit 2: ** See all comments on all answers before posting as lots more info in that.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…