今儿个,咱来聊聊这个小东西,这可是我前两天在捣鼓一个老项目时遇到的,还挺有意思的。
话说那天,我正给一个老掉牙的网页做维护。那网页,代码乱得跟鸡窝似的,一堆的兼容性问题。其中一个需求,就是要我搞清楚用户到底点哪个按钮。我就跟打上交道。
摸索阶段
我也不太清楚这玩意儿具体咋用。我只知道,它好像能告诉我,用户到底点于是我就开始动手试。
我先写个简单的HTML页面,里面放几个按钮:
<button id="btn1">按钮1</button>
<button id="btn2">按钮2</button>
<button id="btn3">按钮3</button>
然后,我写点JavaScript代码,想看看点击按钮时,到底是个
<script>
*('click', function(event) {
</script>
我打开控制台,点点那几个按钮。你猜怎么着?控制台里输出我点的那个按钮的HTML代码!
比如,我点“按钮1”,控制台就输出:
<button id="btn1">按钮1</button>
深入挖掘
这下我明白,这玩意儿,就是指向触发事件的那个元素。我可以通过它,拿到这个元素的各种信息,比如ID、标签名等等。
于是我修改代码,想获取一下按钮的ID:
<script>
*('click', function(event) {
</script>
这回,控制台输出的就是按钮的ID,比如“btn1”、“btn2”。
我还试试,这回输出的是“BUTTON”,都是大写的。
兼容性问题
就在我玩得起劲的时候,我突然想起来,这老项目得兼容IE!我记得,IE好像不支持,它用的是。
为验证我的想法,我赶紧找台老机器,装上IE,跑一下我的代码。果然,控制台报错,说是null
或者未定义。
这可咋办?我总不能写两套代码?
还我想起一个技巧:可以用一个变量,来判断一下浏览器,然后根据不同的浏览器,使用不同的属性:
<script>
*('click', function(event) {
var targetElement = * ? * : *;
</script>
这段代码的意思是,如果存在,就用它;否则,就用。这样,不管是IE还是其他浏览器,都能正常工作。
获取父元素
后来我又遇到一个需求,要获取点击元素的父元素。这回,我用上parentElement
属性。
比如我把上面例子的html改成下面这样,外面套一个div:
<div id="wrap">
<button id="btn1">按钮1</button>
<button id="btn2">按钮2</button>
<button id="btn3">按钮3</button>
</div>
我想在点击按钮的时候获取到外面这个div的id:
<script>
*('click', function(event) {
var targetElement = * ? * : *;
</script>
这样不管点击哪个Button我都可以顺利拿到外层div的id为wrap。
总结
通过这回实践,我对算是有比较深的解。这玩意儿虽然简单,但是用处还挺大的。特别是在处理一些老项目,或者需要兼容IE的时候,它能帮上不少忙。当然现在基本使用更多,但是解一下总归是好的,毕竟保不齐哪天又遇到这样的老项目。