美文网首页
JS利用事件委托获取DOM元素的index

JS利用事件委托获取DOM元素的index

作者: 青争小台 | 来源:发表于2021-03-25 14:28 被阅读0次

我们知道,在jQuery中,元素拥有index()方法,用来获取当前DOM元素的下标(index),比如在ul中的li,可以快速通过以下代码获取当前点击的li的下标:
html:

<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
</ul>

jQuery:

$('ul').on('click', 'li', function () {
    console.log($(this).index());
});

这里是利用事件委托,为ul绑定点击事件,由于jQuery具有隐式迭代的特性(https://www.zhihu.com/question/20146027),利用on的事件委托,每个li即同样绑定了点击事件。这样点击ul中的li即可利用当前元素的index()方法获取下标,这种方法在实际开发中经常使用。

在大多数写法中,我们常见的就是利用闭包或者ES6 let 关键字来获取下标,为每个li都绑定了点击事件,假如有一万个li,这种做法效率并不高:

// ES5闭包
    const lis = document.querySelectorAll('ul li');
    for (var i = 0; i < lis.length; i++) {
        (function (i) {
           lis[i].onclick = function () {
            console.log(i);
           }
          })(i)
    }
    
// ES6 let
    const lis = document.querySelectorAll('ul li');
    for (let i = 0; i < lis.length; i++) {
        lis[i].onclick = function () {
            console.log(i);
        }
    }

但是我们利用JavaScript事件委托,,借用数组的方法,效率更高效

document.querySelector('ul').addEventListener('click', function (e) {
        console.log([...document.querySelectorAll('ul li')].indexOf(e.target)); // 转换数组同样可以使用Array.from()
});

其实核心思路和jQuery一样的,都是利用事件委托,为ul绑定点击事件后,利用H5选择器querySelectorAll将所有的li选择出来,注意,由于获取的结果是伪数组,我们可以利用ES6方法将其转换为数组,借用数组的indexOf()方法,提供的参数为当前点击的目标元素,这样就可以获取当前点击li在数组中的下标了。

附ES5写法:

document.querySelector('ul').addEventListener('click', function (e) {
        console.log(Array.prototype.indexOf.call(document.querySelectorAll('ul li'),e.target));
});

来自:https://shixtao.cn/article/33

相关文章

  • JS利用事件委托获取DOM元素的index

    我们知道,在jQuery中,元素拥有index()方法,用来获取当前DOM元素的下标(index),比如在ul中的...

  • 歌手页面右边shortcut的实现

    数据的获取(listview.vue) 获取index元素的方法封装(dom/js/dom.js) 给scroll...

  • 性能优化

    1、利用事件委托机制,减少对dom元素的操作

  • Vue 中获取 DOM 元素问题

    Vue 获取DOM元素 获取元素 template 部分 js 部分 给元素添加事件 需要用到$nextTick ...

  • 事件委托

    事件委托 事件委托其实就是利用JS事件冒泡机制把原本需要绑定在子元素的响应事件(click、keydown……)委...

  • 2021-03-01

    js 1. 事件委托事件委托指的是,不在事件的发生地(直接 dom)上设置监听函数,而是 在其父元素上设置监听函数...

  • js事件委托(事件代理)

    定义:事件委托就是在DOM事件的冒泡阶段,把具体dom上发生的事件委托给父元素或祖先元素去处理。原理:要了解委托的...

  • javascript的基本元素获取以及循环

    js中的元素获取: 在使用js元素获取时,我们实际上使用的是dom方法获取,基本的获取方法分为四种:1、利用元素i...

  • JavaScript事件代理简述

    事件代理是JavaScript常用的绑定事件技巧把原本要处理的事情委托给父元素 利用的是DOM元素事件冒泡 可以提...

  • JavaScript事件

    事件分类 事件的绑定方法 通过标签绑定事件 通过js获取DOM元素绑定事件 通过addEventListener属...

网友评论

      本文标题:JS利用事件委托获取DOM元素的index

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