zoukankan      html  css  js  c++  java
  • 今天看见了一个有意思的题目-----请实现鼠标点击页面中的任意标签,alert该标签的名字

    RT----感觉这个题目蛮有意思的---开整。

    我第一眼看到这个题目的时候就觉得简直so easy嘛,没什么挑战性啊,不就是给一个标签绑定一个事件,用this来搞掂就OK了么...........

    结果我再仔细一看发现想的略简单.......

    好吧,进入正题

    我开始一直在想如何给页面上所有的元素绑定同一个事件纠结了不少时间,还百度了一下,不过没找到合适的答案,然后我就想貌似没有这种说法。然后我不知道怎么的就通过a标签想到了window和document对象。

    然后给window绑定了事件,点击页面上任意位置都有反应了,如果不传参数的话打印的就是window和document对象,代码如下

    window.onclick=function(){
       alert(this);//这里的打印结果是[object Window]
    }

    document.onclick=function(){
       alert(this);//这里是[object HTMLDocument]
    }

    然后我想到了用this不就能找到当前对象了么.....于是我就相当然的这样传参了。。。结果是果断报错

    window.onclick=function(this){
       alert(this);
    };

    这样不行我就改换了一下思路。换了一个形参名,结果打印出来一串貌似鼠标监听的东东[object MouseEvent],心里暗喜,这下貌似有戏了。

    window.onclick=function(obj){
         alert(obj);
    };

    document.onclick=function(obj){
         alert(obj);
    };

    但是这样也看不出什么,于是果断的按下F12打开控制台。将alert改成了console.log()

    然后首先进入我视线的是那个Video,而我当时点击的就是那个视频,然后就看见了toElement这个玩意...

    MouseEvent {dataTransfer: null, toElement: video, fromElement: null, y: 346, x: 306…}
    1. altKeyfalse
    2. bubblestrue
    3. button0
    4. cancelBubblefalse
    5. cancelabletrue
    6. charCode0
    7. clientX306
    8. clientY346
    9. clipboardDataundefined
    10. ctrlKeyfalse
    11. currentTargetnull
    12. dataTransfernull
    13. defaultPreventedfalse
    14. detail1
    15. eventPhase0
    16. fromElementnull
    17. keyCode0
    18. layerX306
    19. layerY742
    20. metaKeyfalse
    21. offsetX306
    22. offsetY742
    23. pageX306
    24. pageY1393
    25. pathNodeList[0]
    26. relatedTargetnull
    27. returnValuetrue
    28. screenX306
    29. screenY407
    30. shiftKeyfalse
    31. srcElementvideo
    32. targetvideo
    33. timeStamp1412860841531
    34. toElementvideo
    35. type"click"
    36. viewWindow
    37. webkitMovementX0
    38. webkitMovementY0
    39. which1
    40. x306
    41. y346
    42. __proto__MouseEvent

    这下完全找到思路了,果断将代码写为

    window.onclick=function(obj){
         console.log(obj.toElement);

      alert(obj.toElement); 

    };

    然后输出结果如下图;

    我当时以为这就算完了,结果貌似还是不行啊,我只需要video啊,所以我就在toElement下面找啊找,找到了tagName这个好东西..

    于是代码又成为了

    window.onclick=function(obj){
      console.log(obj.toElement.tagName);
      alert(obj.toElement.tagName);
    };

    然后结果如下图

    然后这事还没完,我又在mouseEvent里面找到了三种替代方法......请看如下代码,该段代码没有检测浏览器的兼容性问题,望大神帮忙参考参考,最后希望大神轻喷,这可是我很有成就感的一次尝试呀。

    <script type="text/javascript">
          <!--点击页面上任意标签alert标签名字-->
          document.onclick=function(obj){
          alert(obj.target.tagName);
         // obj.target/obj.srcElement/obj.toElement 得到的结果是整个元素标签并且包括里面的内容
         // nodeName、tagName显示的是大写标签名//localName显示的是小写的
         console.log(obj.target);
    }

    </script>

    最后附上整个代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta content="text/html" charset="utf-8"/>
        <style type="text/css">
            body,div{
                margin: 0;
                padding: 0;
            }
            #div1{
                text-align: justify;
                border: 1px solid red;
                word-spacing: 120px;
    
                /*layout-flow:vertical-ideographic;*/
            }
            #div1 img{
                width: 50%;
                height: 50%;
                vertical-align: middle;
                outline: 5px solid #000 ;
                border: 2px solid red;
            }
            #div1 ul li{
                list-style-type: circle;
                color: red;
            }
            strong { voice-family: "Bob Barker", "Monty Hall", male }
        </style>
    </head>
    <body>
    <div id="div1">
        <img src="05311K62112646.jpg" alt=""/><span>what the  time</span>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
        <strong>ssss</strong>
    </div>
    <div>
        <video controls="true" autoplay="true" width="100%" height="100%" src="ANGGUN - ONLY LOVE.mp4">你的浏览器不支持video标签</video>
    </div>
    <p onclick="ff(this)">sssss</p>
    </body>
    <script type="text/javascript">
        <!--点击页面上任意标签alert标签名字-->
        document.onclick=function(obj){
            alert(obj.target.tagName);
    //        obj.target/obj.srcElement/obj.toElement 得到的结果是整个元素标签并且包括里面的内容
    //        nodeName&&tagName显示的是大写标签名//localName显示的是小写的
            console.log(obj.target);
        }
    
    
    </script>
    </html>
  • 相关阅读:
    批量计算(batch computing)、流式计算(stream computing)、交互计算(interactive computing)、图计算(graph computing)
    ETL相关 ELT
    添加AD验证(域身份验证)到现有网站
    android开发导包升级到androidx踩坑记录【转载】
    Android Support v4v7v13和AndroidX理解【转载】
    架构师的成长之路初片~linux-基本防护措施
    架构师的成长之路初片~nginx优化篇
    架构师的成长之路初片~linux-监控脚本
    架构师的成长之路初片~Virtual-自定义容器
    架构师的成长之路初片~Virtual-容器和镜像常用的管理命令
  • 原文地址:https://www.cnblogs.com/Jayvenlee/p/4014537.html
Copyright © 2011-2022 走看看