一段监视 DOM 的神奇代码

访客4年前黑客资讯874

通过使用此模块,只需将鼠标悬停在浏览器中,即可快速查看DOM米素的属性。基本上它是一个即时检查器。


将鼠标悬停在 DOM 米素上会显示其属性!


自己实验一下

复制下面的整个代码块,并将其粘贴到浏览器 Web 控制台中。现在将鼠标悬停在你正在浏览的任何网页上。 看到了什么?

(function SpyOn() {

  const _id = 'spyon-container',
        _posBuffer = 3;

  function init() {
    document.body.addEventListener('mousemove', glide);
    document.body.addEventListener('mouseover', show);
    document.body.addEventListener('mouseleave', hide);
  }

  function hide(e) {
    document.getElementById(_id).style.display = 'none';
  }

  function show(e) {
    const spyContainer = document.getElementById(_id);
    if (!spyContainer) {
      create();
      return;
    }
    if (spyContainer.style.display !== 'block') {
      spyContainer.style.display = 'block';
    }
  }

  function glide(e) {
    const spyContainer = document.getElementById(_id);
    if (!spyContainer) {
      create();
      return;
    }
    const left = e.clientX + getScrollPos().left + _posBuffer;
    const top = e.clientY + getScrollPos().top + _posBuffer;
    spyContainer.innerHTML = showAttributes(e.target);
    if (left + spyContainer.offsetWidth > window.innerWidth) {
      spyContainer.style.left = left - spyContainer.offsetWidth + 'px';
    } else {
      spyContainer.style.left = left + 'px';
    }
    spyContainer.style.top = top + 'px';
  }

  function getScrollPos() {
    const ieEdge = document.all ? false : true;
    if (!ieEdge) {
      return {
        left : document.body.scrollLeft,
        top : document.body.scrollTop
      };
    } else {
      return {
        left : document.documentElement.scrollLeft,
        top : document.documentElement.scrollTop
      };
    }
  }

  function showAttributes(el) {
    const nodeName = `<span>${el.nodeName.toLowerCase()}</span><br/>`;
    const attrArr = Array.from(el.attributes);
    const attributes = attrArr.reduce((attrs, attr) => {
      attrs += `<span>${attr.nodeName}</span>="${attr.nodeValue}"<br/>`;
      return attrs;
    }, '');
    return nodeName + attributes;
  }

  function create() {
    const div = document.createElement('div');
    div.id = _id;
    div.setAttribute('style', `
      position: absolute;
      left: 0;
      top: 0;
      width: auto;
      height: auto;
      padding: 10px;
      box-sizing: border-box;
      color: #fff;
      background-color: #444;
      z-index: 100000;
      font-size: 12px;
      border-radius: 5px;
      line-height: 20px;
      max-width: 45%;
      `
    );
    document.body.appendChild(div);
  }

  init();

})();


它是怎么运作的

此模块以IIFE的形式实现。这样只要需要一些 DOM 监视辅助,就可以将代码复制并粘贴到 Web 控制台中。将 div 插入到文档的正文中,并在正文上启用鼠标事宜侦听器。从目的米素中检索属性,将其简化为单个字符串,最后在工具提醒中显示。


用例

  1. 辅助解决UI错误
  2. 确保你所应用的 DOM 米素能够按预期事情(好比点击获得准确的类,等等)
  3. 领会一个 Web 应用的结构


你可以从这段代码中学到什么

  1. 若何使用 Vanilla *** 实现工具提醒模块
  2. 若何剖析 DOM 工具的属性
  3. 若何找到鼠标 X 和 Y 的位置
  4. 若何获取文档的转动位置
  5. 领会差别浏览器的行为方式 —— Edge vs. Chrome vs. Safari


开源

你可以在这里找到源代码,希望你能做得更好!也许你不希望将其作为 IIFE 来实现,或者是去显示其他数据。

原文:https://dev.to/eddieaich/spy-on-the-dom-3d47
作者:Eddie Aich,翻译:疯狂的手艺宅
思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

黑山征婚(满洲里到黑山头)

驾车路线:全程约1311.7公里起点:满洲里市1.呼伦贝尔市内驾车方案1)从起点向正东方向出发,行驶160米,右转2)行驶30米,左转进入迎宾大道3)。 驾车路线:全程约198.0公里起点:满洲里市1...

零食驿站加盟能挣钱吗?加盟怎么样?

零食驿站加盟能挣钱吗?加盟怎么样?

不知道你对零食驿站加盟项目标相识有几多,假如你对这个加盟项目也感乐趣,想要举办加盟创业的话,那么你就不要再踌躇了,此刻就和我一起来看看这篇文章吧!那么,零食驿站加盟能挣钱吗?加盟怎么样?想要知道谜底的...

杭州高端外围QQ群-【戚霄】

“杭州高端外围模特QQ群-【戚霄】” 学历:高中点击收藏淘宝模特私拍:3906米/天汉族/9760婚否:未婚微博地址:3643九江高端模特预约微信群,昵称:九江高端模特预约微信群邮箱:w21**u*v...

金针菇怎么做好吃?金针菇的这种做法,好吃又好看

金针菇怎么做好吃?金针菇的这种做法,好吃又好看

金针菇怎么做好吃(金针菇的这种做法,好吃又好看)很多人都喜欢炒着或者凉拌金针菇吃,今天小编教您换种吃法做金针菇,不烫不炒不凉拌。这样做出来的金针菇喷香酥脆,成品还特别好看,喜欢吃金针菇的朋友快试试。...

示爱的句子(霸道示爱句子)

1.喜欢我这是革命需要,知道不?2.有本事你就照顾好自己,不然就老老实实地让我来照顾你!3.电灯的发明,点亮了夜晚温暖着人心;飞机的出现,节省了。 老娘要定你了,还不快从了老娘! 十大经典表白一.男:...

曼哈顿手抓牙胶球怎么样 孩子用曼哈顿手抓牙胶球安全吗

曼哈顿手抓牙胶球怎么样 孩子用曼哈顿手抓牙胶球安全吗

小孩在长牙的情况下尤其喜爱咬东西,而在这个环节应该怎么做比较好呢,许多父母会挑选牙胶,那麼哪些的牙胶情况下小孩用呢,我为大伙儿产生曼哈顿手抓牙胶球强烈推荐,一起来看曼哈顿球评测吧。 怎样选牙胶 专...