今天看见了一个有意思的题目-----请实现鼠标点击页面中的任意标签,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. altKey: false
  2. bubbles: true
  3. button: 0
  4. cancelBubble: false
  5. cancelable: true
  6. charCode: 0
  7. clientX: 306
  8. clientY: 346
  9. clipboardData: undefined
  10. ctrlKey: false
  11. currentTarget: null
  12. dataTransfer: null
  13. defaultPrevented: false
  14. detail: 1
  15. eventPhase: 0
  16. fromElement: null
  17. keyCode: 0
  18. layerX: 306
  19. layerY: 742
  20. metaKey: false
  21. offsetX: 306
  22. offsetY: 742
  23. pageX: 306
  24. pageY: 1393
  25. path: NodeList[0]
  26. relatedTarget: null
  27. returnValue: true
  28. screenX: 306
  29. screenY: 407
  30. shiftKey: false
  31. srcElement: video
  32. target: video
  33. timeStamp: 1412860841531
  34. toElement: video
  35. type: "click"
  36. view: Window
  37. webkitMovementX: 0
  38. webkitMovementY: 0
  39. which: 1
  40. x: 306
  41. y: 346
  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>
时间: 2024-11-17 08:00:20

今天看见了一个有意思的题目-----请实现鼠标点击页面中的任意标签,alert该标签的名字的相关文章

[Windows10]记一次修复注册表相关血案:该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置”页面中创建关联。

今天闲得蛋疼清理了一下右键菜单,于是在之后某时刻使用Everything的“双击路径列打开目录”功能时发现异常: [Window Title] Everything.exe [Content] 该文件没有与之关联的应用来执行该操作.请安装应用,若已经安装应用,请在“默认应用设置”页面中创建关联. [确定] 接下来的自救过程实在曲折,中间查到Everything是调用Windows API  SHOpenFolderAndSelectItems 失败导致弹这个错误(Automatically op

UVA-839-二叉树-一个有意思的题目

题意: 一颗二叉树可以看成一个杠杆,左右俩边有重量,有到支点长度,判断整个树是否平衡(根据杠杆原理),如果当前结点有左孩子,那么当前左边的重量就是左孩子的总和,右边同理 递归,发现scanf和cin的效率差好多. AC时间:20ms(scanf),80ms(cin) #include<stdio.h> #include<iostream> #include<queue> #include<memory.h> using namespace std; cons

两道有意思的题目

碰到两道有意思的题目,记录一下. 题目一: 问,对于任意一个正整数,是否存在一个它的倍数全是由1和0组成? 例如: 1 * 1 = 1 2 * 5 = 10  (2的5倍是10,10由1和0组成) 3 * 37 = 111 (3 的 37 倍是111,111 全部由1组成) 4 * 25 = 100 (4 的 25 倍是100,100 由1和0组成) 5 * 20 = 100 (5 的 20 倍是100,100由1 和 0 组成) …… 现在需要判断,随便给一个正整数,是否存在一个它的倍数满足题

61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k&gt;=2)个数字呢?[find k missing numbers from 1 to n]

[本文链接] http://www.cnblogs.com/hellogiser/p/find-k-missing-numbers-from-1-to-n.html  [题目] 从1到n,共有n个数字(无序排列),每个数字只出现一次.现在随机拿走一个数字x,请给出最快的方法,找到这个数字.要求时间复杂度为O(n),空间复杂度为O(1).如果随机拿走k(k>=2)个数字呢? [分析] 题目给出的条件很强,数字是从1~n的数字,限制了数字的范围:每个数字只出现一次,限制了数字出现的次数:随即拿走了一

一道笔试题-给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大。

问题描述:给定一个正整数序列,请尝试将它们重新排列使得排列的结果最大,例如正整数序列为9,31,35,3,7则最大值为9735331. 思路分析:先将正整数序列转换为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可.根据题目的要求,两个数字m和n排成的数字mn和nm,如果mn<nm,那么我们应该输出nm,也就是m应该排在n的后面,也就是m<n.反之,如果nm<mn,m排在n的前面,n<m.如果mn==mn,m等于n. 比较函数的定义是本解决方案的关键.这道题其实就是希

刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的题.去发现问题. 题目:     给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 解析: 实际这里就是给你的一个列表的数字,给你一个预期,让你返

一个有意思的需求——中文匹配度

引言 最近LZ带头在做一个互联网项目,互联网的东西总是那么新鲜,这也难怪大部分猿友都喜欢互联网.这个互联网项目不仅让LZ开发了一个HBase大数据应用,近期的一次需求讨论会上,又出来一个小需求,蛮有意思的.这些需求在之前枯燥的企业内部应用开发中,还是很难见到的,毕竟内部应用更多的是业务流程的体现. 具体的需求这里不方便透露,但简单的描述一下需求,就是如何判断两个公司名是一个.这其实就是Java当中字符串的相等判断,最简单的当然是用equals来判断.但是由于实际情况是,公司名是由客户手动输出的,

做一个有意思的人

http://www.nowamagic.net/librarys/eight/posts/2545到底应该过一个有意义的人生,还是做一个有意思的人?什么样的人才是一个有意思的人.第一次读这篇文章,我就十分感概.我们从小受教育说要为社会做贡献,上班了被要求以公司为家,或许我们应该思考一下如何做一个有意思的人.这篇文章或许你看过,我觉得可以再看一遍. 作者:黄铁鹰 & 芮成钢 与几位好友们有一个共识:大家对一个人最高的评价是:“这是一个很有意思,很精彩的人”.大家以这个标准,来判断一个人是否值得成

CSAPP中一个有意思的小东西

回家的效率明显下降了,但是第三章还是快要结束的节奏.今天看到定长数组这里的时候,看到一个好玩的东西.在计算机的底层中,所有对数组的操作都是利用指针来完成的.数组其实也是一个很简单的数据结构,就是把一些最简单的数据类型合并在一段连续的内存区域上,这就是一个复合类型---数组. 学C语言的时候,大家都知道访问数组元素有两种方法,一种是利用数组名加索引的形式,另外一种就是利用指针加上偏移量的形式.在底层中,不管你用什么方式来访问元素,最后多会转化成对指针的操作. 在编写 代码的时候,编译器在编译过程中