【问题标题】:highlight a DOM element on mouse over, like inspect does在鼠标悬停时突出显示 DOM 元素,就像检查一样
【发布时间】:2012-06-16 03:45:10
【问题描述】:

我们有一个书签,用户点击一个按钮,需要像 highligther 这样的检查。我们希望这是跨浏览器。

为此,我们需要在鼠标移动期间检测 DOM 元素,一旦我们有了这个元素,我们就需要用 CSS 突出显示。

我们在通过鼠标移动检测 DOM 元素时遇到问题,您能指导我们如何完成吗?

一旦我们有了这个 DOM 元素,在用户点击时我们需要提取 XPath。

【问题讨论】:

  • 您尝试过什么吗?你有代码吗?
  • 我们已经找到如何提取标签的 XPath,请参阅我的其他问题。

标签: javascript html dom bookmarklet highlight


【解决方案1】:

您可以将mousemove 挂接到documentdocument.body,然后使用事件对象的target 属性找出鼠标所在的最顶层元素。然后将 CSS 应用到它可能最容易通过添加一个类来完成。

但我想知道:hover psuedo-class 是否可以为您节省一些麻烦...

如果不使用:hover,这里有一个例子:

(function() {
  var prev;

  if (document.body.addEventListener) {
    document.body.addEventListener('mouseover', handler, false);
  }
  else if (document.body.attachEvent) {
    document.body.attachEvent('mouseover', function(e) {
      return handler(e || window.event);
    });
  }
  else {
    document.body.onmouseover = handler;
  }

  function handler(event) {
    if (event.target === document.body ||
        (prev && prev === event.target)) {
      return;
    }
    if (prev) {
      prev.className = prev.className.replace(/\bhighlight\b/, '');
      prev = undefined;
    }
    if (event.target) {
      prev = event.target;
      prev.className += " highlight";
    }
  }

})();

Live copy | source

【讨论】:

  • 这个 :hover 类是否适用于任何 HTML dom 元素?并且在每个浏览器中都有效吗?不知道 FF 3.5 和 IE7 等旧版本是否支持它?
  • @IonutFlaviusPogacian: :hover 确实适用于 IE7 或更高版本中的任何元素(不适用于 IE6,它仅在锚点上支持它)。但我必须仔细考虑如何构建 CSS。只是body *:hover { ... } 可能不会这样做,如果您只想突出显示鼠标悬停的 topmost 元素...
  • 这是一个 jsfiddle,可以显示类似的东西 jsfiddle.net/MBujm 忽略 jQuery,不需要它。
  • @Esailija 和 T.J.Crowder 你请查看这个相关问题Mouseover event doesn't granulate on IE9 for sub elements, event doesn't start on IE8
  • 这真的很有帮助,但我需要的 iframe 里面不起作用..请任何人帮助。
【解决方案2】:

在 jquery 的帮助下你可以做这样的事情

$('*').hover(
    function(e){
        $(this).css('border', '1px solid black');
        e.preventDefault();
        e.stopPropagation();
        return false;
    },function(e){
        $(this).css('border', 'none');
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
);

在您的书签中使用此代码,您可以加载任何代码

javascript:function loadScript(src){f=document.createElement('script');if(f){f.setAttribute("type","text/javascript");f.setAttribute("src",src);document.getElementsByTagName("head")[0].appendChild(f);}};loadScript("yourscripturl");

【讨论】:

  • 你碰巧知道这是如何使用纯 javascript 完成的吗?在书签中加载 JQuery 有点问题。
  • 我只是编辑我的答案,你可以使用书签代码来加载一个可以包含 jquery 的 biget 代码并做任何你想做的事情
  • 最后更改yourscripturl
  • 哇!这太棒了,因为您现在可以使用书签做更多事情!但是,我也怀疑这也有点危险,因为它会打开更多的安全漏洞,不是吗?
  • @Adrian 除非您自己故意加载错误脚本或有人劫持您的 url 并在那里添加他们的错误脚本,然后是的,这是一个安全漏洞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
相关资源
最近更新 更多