分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容

发布时间:2023-09-06 02:36责任编辑:苏小强关键词:点击事件

这是一个非常常见的面试题,出题方式多样,但考察点相同,下面我们来看看这几种方法:
方法一:

var itemli = document.getElementsByTagName("li");for(var i = 0; i<itemli.length; i++){    itemli[i].index = i; //给每个li定义一个属性索引值    itemli[i].onclick = function(){      alert(this.index+this.innerHTML);     }}

方法二:

var itemli = document.getElementsByTagName("li");for(var i = 0; i<itemli.length; i++){   (function(n){  itemli[i].onclick = function(){      alert(n+itemli[n].innerHTML);      }  })(i)}

方法三:

var itemli = document.getElementsByTagName("li");for(var i = 0; i<itemli.length; i++){itemli[i].onclick = function(n){    return function(){alert(n+itemli[n].innerHTML); }  }(i)}

方法四:

$("ul li").click(function(){var item = $(this).index(); //获取索引下标 也从0开始var textword = $(this).text(); //文本内容alert(item+textword);})

上面这四种方法都可以实现循环绑定,但是我们知道,频繁的操作DOM是非常消耗性能的,如果有1000个li,怎么办呢?我们还有另一种思路,事件代理,又称事件委托。简单的来讲就是利用JS中事件的冒泡属性,把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。下面我们来看看。

方法五(JS事件代理):

var ul = document.querySelector("ul");  ulItem.onclick = function (e) {  e = e || window.event; //这一行及下一行是为兼容IE8及以下版本  var target = e.target || e.srcElement;  if (target.tagName.toLowerCase() === "li") {    var li = this.querySelectorAll("li");    index = Array.prototype.indexOf.call(li, target);    alert(target.innerHTML + index);  }}

上述代码中,为什么需要 “index = Array.prototype.indexOf.call(li,target);” 这样使用数组的indexOf方法呢,这是因为querySelectorAll方法获取到的元素列表不是数组,和函数的arguments一样是一种类数组类型,不可以直接使用数组的方法。

方法六(jQuery事件代理):

$(document).ready(function () {  $("ul").on("click", function (event) {  var target = $(event.target);  alert(target.html() + target.index())});

JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容

原文地址:https://www.cnblogs.com/yangsg/p/10606553.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved