美文网首页JavaScript
作用域和事件委托

作用域和事件委托

作者: LuckyS007 | 来源:发表于2017-04-25 16:01 被阅读17次

1.作用域

<body>
    <ul>
        <li>0</li>
        <li>1</li>
        <li>2</li>
    </ul>
    <script>
    //var 没有块级作用域  输出是3 3 3
        /*var node = document.querySelectorAll('ul li')
        for(var i = 0;i<node.length;i++){
            node[i].addEventListener('click',function(){
                alert('click'+i)
            })
        }*/

    //闭包 、输出1.2.3
        /*var node = document.querySelectorAll('ul li')
        for(var i = 0;i<node.length;i++){
            (function(i){
                node[i].addEventListener('click',function(){
                    alert('click'+i)
                })
            })(i)
        }*/

    //forEach
        var node = document.querySelectorAll('ul li')
            Array.from(node).forEach(function(nodeItem,index){
                nodeItem.addEventListener('click',function(){
                    alert('click'+index)
                })
            })
    </script>
</body>
2.事件委托
<body>
<ul>
    <li>0</li>
    <li>1</li>
    <li>2</li>
</ul>
<button>添加li元素</button>
<script>
    var ul = document.querySelectorAll('ul')[0]
    var addButton = document.querySelectorAll('button')[0]
    var addIndex = 3

    addButton.addEventListener('click',function(){
        var addli = document.createElement('li')
        addli.innerHTML = `这是添加的元素${addIndex}`
        ul.append(addli)
        addIndex++
    })

    ul.addEventListener('click',function(e){
      //e  是事件源
        var ev = ev || window.event; //ie兼容写法
        var target = ev.target || ev.srcElement;
        if(target.nodeName.toLocaleLowerCase() == 'li'){
            alert(target.innerHTML)
        }
    })
</script>
</body>
2.1递归调用 触发li的子节点时,准确定位到每个li
<body>
<ul>
    <li id="1">
        <span>span元素</span>
    </li>
    <li id="2">
        <div>
            <span>div包着一个span元素</span>
        </div>
    </li>
    <li id="3">
        <div>div元素</div>
    </li>

</ul>
<script>
    var ul = document.querySelectorAll('ul')[0]

    ul.addEventListener('click',function(e){
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        while(target.nodeName !== ul){
           if(target.nodeName.toLocaleLowerCase() == 'li'){
              console.log(target.id)
              alert(target.innerHTML)
              break
           }
           target = target.parentNode
        }
    })
</script>
</body>

相关文章

  • 作用域和事件委托

    1.作用域 2.事件委托 2.1递归调用 触发li的子节点时,准确定位到每个li

  • 前端问(面试)题

    dom执行顺序 事件委托原理 原型链的作用,与作用域链的区别 js事件轮询原理、JavaScript的运行机制 结...

  • AngularJs事件

    事件的传播 冒泡 要把事件沿着作用域链向上派送(从子作用域到父作用域),我们要使用$emit() 函数。 name...

  • 在 AngularJS 作用域层次结构内发出和广播事件

    作用域的一个很棒的特点是具有在作用域层次结构内发出和广播事件的能力。事件允许你发送通知给该作用域内不同的层次,告诉...

  • angularjs--两个controller之间的通讯

    因为作用域是有层次的,所以可以利用作用域链传递事件。 传递事件有2种方式: * $broadcast: 触发的事件...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 彻底搞懂JS作用域和作用域链

    作用域和作用域链 作用域:决定了代码区块中变量和其他资源的可见性; ·全局作用域和函数作用域 作用域是分层的内部可...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • JavaScript函数02

    目录 常用事件和事件处理函数 递归函数 函数的属性和方法 函数的作用域 常用事件和事件处理函数 事件参考--MDN...

  • node.js小记 (0419) http源码解读

    什么是作用域? 作用域分局部作用域和全局作用域,同时作用域和变量有关,在局部作用域内可以访问到全局变量,在局部作用...

网友评论

    本文标题:作用域和事件委托

    本文链接:https://www.haomeiwen.com/subject/jdvvzttx.html