document.querySelectorAll与伪类:悬停不在FF或IE中工作

时间:2013-10-16 19:25:34

标签: javascript cross-browser pseudo-class selectors-api

我想获取光标下的元素。当我使用document.querySelectorAll(":hover");时,它在Chrome中运行良好,但在Firefox或IE中无效。

这可能是因为我在Google地图中的eventListener中使用它。我在这里如何使用它。

google.maps.event.addListener(polygon,"mouseout",function(){
  elementHover = document.querySelectorAll( ":hover" );
  alert(elementHover[elementHover.length-1].id);
});

在Chrome中,它为我提供了我用光标悬停的元素的ID,但我在IE或FF中什么都没有。

1 个答案:

答案 0 :(得分:2)

你有没有理由使用mouseout而不是mouseover?似乎,取决于浏览器如何解决它(它是在你离开之前触发事件,还是刚刚离开之后,正在侦听事件的对象?),这可能会引起一些惊愕。有没有理由你不只是传递Event对象来获取你要离开的对象,而不是希望选择器会被激活?

根据Google的文档(https://developers.google.com/maps/documentation/javascript/events#EventArguments),您可以将事件对象传递到函数中:

google.maps.event.addListener(polygon,"mouseout",function(evt){
  // get the target from the mouseout event, something like this:
  elementHover = evt.target;
  alert(elementHover[elementHover.length-1].id);
});

我目前无法对此进行测试,因此您可能不得不对其进行操作并阅读Google的文档以确保您正在查看的事件为您提供对其来自的对象的引用(您甚至可以使用“this”而不是evt.target,具体取决于传递给上下文的内容)。但是,:悬停仍然是一个半飞行的野兽,并且根据事件解决的顺序,你很可能只在Chrome中看到它,因为它会以不同于FF和IE的方式触发事件。

祝你好运!