原生js的e.target.closest()方法

closest()方法,首先检查当前元素是否匹配,如果匹配则直接返回当前元素本身;如果不匹配则沿着dom树一层一层向上查找祖先元素,直到找到匹配的祖先元素为止;如果都不不匹配则返回空null。

用法:比如,有一个ul列表,当点击ul里面的内容时,让ul的边框变成粉色。
点击前:

点击后:

可以看到,当点击文本click me时,当前元素【e.target】就是<b>Click me!</b>,e.target.closest('ul'),会从当前元素开始查找是不是ul,发现不匹配;则直接向父级【li】查找是不是ul,发现也不匹配;接着向祖先【ul】查找是不是ul,发现是ul匹配。则这个ul就是我们要找的元素。则这个ul的边框颜色变成粉色。
附示例源代码:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<style>
  li { margin: 3px; padding: 3px; background: #EEEEEE; }
  li.hilight { background: yellow; }
</style>
</head>
<body>
  <ul>
    <li><b>Click me!</b></li>
    <li>You can also <b>Click me!</b></li>
  </ul>
<script>
  window.onload = function(){
  	document.onclick=function(e){
    	console.log('e.target=========',e.target)
        e.target.closest('ul').style.border = '2px solid pink'
    }
  }
</script>
</body>
</html>

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来为您解答。首先需要一个 HTML 结构,如下: ```html <div class="tab"> <ul class="tab-nav"> <li class="active">选项卡1</li> </ul> <div class="tab-content"> <div class="tab-pane active">选项卡1的内容</div> </div> </div> ``` 然后,我们使用原生 JS 实现以下效果: 1. 实现选项卡动态添加 ```js var tabNav = document.querySelector('.tab-nav'); var tabContent = document.querySelector('.tab-content'); // 添加选项卡 function addTab(title, content) { var index = tabNav.children.length; // 选项卡索引 var li = document.createElement('li'); li.innerText = title; li.setAttribute('data-index', index); // 设置索引 tabNav.appendChild(li); var div = document.createElement('div'); div.classList.add('tab-pane'); div.innerText = content; div.setAttribute('data-index', index); // 设置索引 tabContent.appendChild(div); } addTab('选项卡2', '选项卡2的内容'); ``` 2. 实现选项卡切换 ```js // 切换选项卡 function switchTab(index) { var activeLi = tabNav.querySelector('.active'); var activeDiv = tabContent.querySelector('.active'); if (activeLi) activeLi.classList.remove('active'); if (activeDiv) activeDiv.classList.remove('active'); var li = tabNav.querySelector(`li[data-index="${index}"]`); var div = tabContent.querySelector(`div[data-index="${index}"]`); if (li) li.classList.add('active'); if (div) div.classList.add('active'); } // 点击切换选项卡 tabNav.addEventListener('click', function(e) { var li = e.target.closest('li'); if (li) { var index = li.getAttribute('data-index'); switchTab(index); } }); ``` 3. 实现选项卡删除 ```js // 删除选项卡 function removeTab(index) { var li = tabNav.querySelector(`li[data-index="${index}"]`); var div = tabContent.querySelector(`div[data-index="${index}"]`); if (li) tabNav.removeChild(li); if (div) tabContent.removeChild(div); } // 双击删除选项卡 tabNav.addEventListener('dblclick', function(e) { var li = e.target.closest('li'); if (li) { var index = li.getAttribute('data-index'); removeTab(index); } }); ``` 以上就是使用原生 JS 实现选项卡动态添加、切换和删除的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值