看了很多文章,事件委托的做法都是只有一级子元素
<ul id="p">
<li data-index="1">
1
</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
这样直接判断事件的target是否是li标签就行了,但很多情况都不是这样的。万一我的li标签里还有其他元素呢,target获取的是点击最具体的那个元素,就会出现问题。下面是解决办法。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
<ul id="p">
<li data-index="1">
<h1>
ceshi
<h1>
ceshi1
</h1>
</h1>
</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script type="text/javascript">
let p = document.querySelector('#p');
p.addEventListener('click',(e)=>{
let index = 0;
let pathList = e.path;
pathList.some((item,index_)=>{
if(item === p){
index = index_;
return true;
}
});
if(index == 0) return;
let c = pathList[index-1];
console.log(c);
console.log(c.dataset.index);
});
</script>
</body>
</html>
不知道还有没有更加简单的方式,等找到在更新。
|