如何在纯Javascript中选择嵌套元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在纯Javascript中选择嵌套元素?相关的知识,希望对你有一定的参考价值。
这可能很简单,但是我正在努力如何在click事件中定位元素。我将其与jQuery配合使用,但我想使用纯javascript来实现。基本上我有这个列表:
<ul class= 'my-todo-list'>
<li id="todo-1" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
<li id="todo-2" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
<li id="todo-3" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
</ul>
而且我的JavaScript看起来像这样:
document.querySelector('.todo a.delete').addEventListener('click', function(e)
var listElement = this.parentNode.parentElement;
var todoId = listElement.getAttribute('id').replace('todo-','');
alert(todoId);
);
我想要的是,如果我单击删除链接,我应该看到待办事项的ID。例如,如果我单击第二个删除链接,则应提醒“ todo-2”。
NOTE:我尝试了document.querySelector('。todo a.delete'),但它也不起作用。
使用jQuery的简单解决方案是
$('.todo a.delete').live('click', function()......)
但是我想用纯JavaScript来做。有人可以帮我吗?提前非常感谢!
答案
您可以在ul
元素上添加事件侦听器,并检查触发click事件的元素是否包含delete
类。如果是这样,请从包装触发事件的特定元素的id
元素中获取li
属性
const $ul = document.querySelector('ul');
$ul.addEventListener('click', (e) =>
if (e.target.matches('a.delete'))
const li = e.target.parentElement.parentElement;
const id = li.getAttribute('id');
alert(id);
);
<ul>
<li id="todo-1" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
<li id="todo-2" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
<li id="todo-3" class="todo">
<div class="actions">
<a href="#" class="edit">Edit</a>
<a href="#" class="delete">Delete</a>
</div>
</li>
</ul>
另一答案
您可以使用querySelectorAll
和map
将事件映射为:>
[...document.querySelectorAll('.todo a.delete')].map((item) =>
item.addEventListener('click', function(e)
var listElement = this.parentNode.parentElement;
var todoId = listElement.getAttribute('id').replace('todo-','');
alert(todoId);
)
);
[...document.querySelectorAll('.todo a.delete')].map((item) => item.addEventListener('click', function(e) var listElement = this.parentNode.parentElement; var todoId = listElement.getAttribute('id').replace('todo-',''); alert(todoId); ) );
<ul class= 'my-todo-list'> <li id="todo-1" class="todo"> <div class="actions"> <a href="#" class="edit">Edit</a> <a href="#" class="delete">Delete</a> </div> </li> <li id="todo-2" class="todo"> <div class="actions"> <a href="#" class="edit">Edit</a> <a href="#" class="delete">Delete</a> </div> </li> <li id="todo-3" class="todo"> <div class="actions"> <a href="#" class="edit">Edit</a> <a href="#" class="delete">Delete</a> </div> </li> </ul>
以上是关于如何在纯Javascript中选择嵌套元素?的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致无法在纯 JavaScript 中检测到滚动到 HTML 元素的底部?
有啥方法可以在纯 javascript 中将元素作为函数获取?
$(document).on() 在纯 JavaScript 中?