해결 방법은 다음과 같습니다.
먼저 이벤트의 현재 노드, 즉 jquery의 currentTarget이 대상, 즉 다음 확장자 $.containsNode에 포함되어 있는지 확인합니다.
그런 다음 hover가 호출될 때 mouseover 및 mouseout 이벤트에서 currentTarget이 대상, 즉 $.fn.fhover 확장자에 포함되어 있는지 판단합니다.
관련 코드는 다음과 같습니다.
$.containsNode = function(parentNode, childNode) {
if (parentNode.contains) {
return parentNode != childNode && parentNode.contains(childNode);
} else {
return !!(parentNode.compareDocumentPosition(childNode) & 16); >}
}
$ .fn.fhover = function(over, out) {
this.hover(function(e) {
if ($.containsNode(e.target, e.currentTarget) )) {
return;
}
over.call(this, e)
}, function(e) {
if ($.containsNode(e.target, e.currentTarget) )) {
return;
}
out.call(this, e)
})
return this;