javascript - 如何在不分配 ID 的情况下测试 HTML 元素的唯一标识?
问题描述
我已经在 JavaScript 中使用以下代码几个月了,它似乎可以正常工作,但我开始想知道它为什么有效以及它是否是一种安全的方法。
目的只是跟踪当前选定的 HTML 元素,如果用户再次单击当前选定的元素,则不执行由事件触发的功能代码。
function elem_mouse_evt( evt )
{
if ( evt.currentTarget === elem_mouse_evt.e ) return;
elem_mouse_evt.e = evt.currentTarget;
/* ... */
}
就我而言,这可能是一个相当愚蠢的问题,但为什么这与比较两个对象的等效性不同?JavaScript 如何进行这种比较,因为每个都代表一个值的集合?
谢谢你。
另外,在考虑发布的答案时,我遗漏了一个非常重要的观点,即函数属性e
具有更大的用途。用户可以选择对当前选择和/或其内容执行的操作菜单。我认为将引用存储在函数属性中而不是遍历 DOM 以通过其唯一属性之一搜索它会更有效。这是一个合理的方法吗?
解决方案
目的只是跟踪当前选定的 HTML 元素,如果用户再次单击当前选定的元素,则不执行由事件触发的功能代码。
我不会按照您的要求(唯一标识一个元素),而是以某种方式标记该元素。一种方法是在它的dataset
. 我猜你无论如何都会想在某个时候改变这个选定元素的样式,以便用户看到它已经被选中。在这种情况下,我们将添加一个类。
// Add an event listener on the container for these elements.
// It's more efficient to have just one event listener, rather than thousands.
document.querySelector('.parent').addEventListener('click', (e) => {
// Ensure what's actually clicked meets the filter
if (!e.currentTarget.matches('.selectable')) {
return;
}
// If it's already selected, don't do anything else! (You can combine this with above.)
if (e.currentTarget.matches('.selected')) {
return;
}
e.currentTarget.classlist.add('selected');
// Perform your other actions here
});
推荐阅读
- java - 转换为泛型类型并调用 doubleValue() 方法
- javascript - 将 innerHTML 切换为不同的值 onclick()
- python - PYTHON:在文本文件中搜索一个单词,其中包含单词之间的空格
- r - r:提取和填充具有多个后续日期的行上缺失日期的函数
- entity-framework - Entity Framework Core 多对多设计问题
- python - 如何在浏览器中显示我的 HTML 文件?我已经成功连接服务器和客户端
- google-cloud-platform - 无法使用 GPU 创建 GCP 深度学习 VM 实例
- java - 在java中替换数组中的多个字母
- html - 单击时旋转字体真棒 90 图标
- prestashop - Prestashop 类别价格