js事件代理

js事件代理可以方便我们多个同组对象添加统一事件,简化代码,事件代理使用的是事件冒泡特性(事件会随着子父级层次向外传递),点击子元素触发事件后在父元素获取,通过事件的目标对象确定具体触发的子元素。

js原生事件绑定,兼容方法见我的博客另一篇文章:http://blog.csdn.net/qq_14886653/article/details/52495000

简单例子,解释下js事件代理

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            ul {
                width: 500px;
                height: 50px;
                margin: 50px auto;
            }

            ul li {
                width: 50px;
                height: 50px;
                margin-right: 20px;
                float: left;
                list-style: none;
            }

            ul li:first-child {
                background: red;
            }

            ul li:nth-child(2) {
                background: green;
            }

            ul li:nth-child(3) {
                background: blue;
            }

            ul li:nth-child(4) {
                background: yellow;
            }

            ul li:nth-child(5) {
                background: pink;
            }
        </style>
    </head>

    <body>
        <ul id="ul">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <script type="text/javascript">
            HTMLElement.prototype.__defineGetter__("currentStyle", function() {
                return this.ownerDocument.defaultView.getComputedStyle(this, null);
            });//兼容性写法,兼容谷歌和火狐,获得非内联样式中的样式值,源自百度,可以自己百度。
            var ul = document.getElementById("ul");
            var body = document.getElementsByTagName("body")[0];
            ul.addEventListener("click", click_btn, false);

            function click_btn(event) {
                event = event || window.event;
                //判断触发时间目标元素的标签名,忽视其他元素点击事件
                if (event.target.tagName == 'LI'){
                    body.style.background = event.target.currentStyle.background;
                }
                else{
                    return;
                }
            }       </script>
    </body>

</html>

上述代码功能,点击颜色方块,改变body背景色为li标签的背景色。通过事件对象进行判断,得到具体的触发事件的元素,进行相应的事件处理。

时间代理的优点:减少代码量,方便快捷。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事件代理是一种在JavaScript中常用的技术,它可以通过在父元素上监听事件,并使用事件冒泡的原理,来实现对子元素的操作。在获取li的内容时,事件代理也能派上用场。 比如说,我们有一个ul元素,其中包含了多个li元素。现在我们想要获取某个li元素的内容。我们可以通过在ul元素上添加事件监听,来捕捉到li元素的点击事件。 具体实现的步骤如下: 1. 首先,获取ul元素的引用,可以使用document.getElementById()或者document.querySelector()方法。 2. 然后,通过ul元素的addEventListener()方法,添加一个点击事件的监听器。在事件监听器的回调函数中,我们可以通过event对象的target属性,并配合nodeName属性(或者tagName属性)来判断点击的是否是li元素。 3. 如果点击的确实是li元素,我们就可以获取到该li元素的内容了。可以使用innerHTML属性来获取li元素内部的HTML代码,或者使用textContent属性来获取li元素的纯文本内容。 整个过程的代码如下: ```javascript var ul = document.getElementById("ul"); // 获取ul元素的引用 ul.addEventListener("click", function(event) { // 添加点击事件的监听器 if (event.target.nodeName === "LI") { // 判断点击的是否是li元素 var liContent = event.target.innerHTML; // 获取li元素的内容 console.log(liContent); } }); ``` 通过上述代码,我们就可以在点击li元素时,获取到它的内容,并将内容输出到控制台中。 需要注意的是,事件代理可以减少事件监听器的数量,提高性能,特别是当有多个子元素时。同时,由于事件冒泡的存在,我们可以利用事件代理来处理动态添加的元素,而不需要重复绑定事件监听器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值