javascript - 获取点击元素的类名
问题描述
我有一些动态创建的 divs 。当用户点击屏幕时,我想检查它是否在动态创建的 div 之一上。但它似乎不起作用。我已经有一个 window.addeventListener 但这也不适用于动态创建的 div。
var divk = document.createElement("div");
divk.className="divk";
window.addEventListener('click', function(e){
if (document.getElementById('outside_click_purpose').contains(e.target)){
currentItem = e.target;
if (currentItem.classList.contains("divk")) {
alert("contains !!!");
}
}
});
解决方案
我认为你需要使用event delegation
然后使用matches
注意我们如何使用
e.target.matches('.dynamic')
要检查我们的班级是否存在,我们可以使用任何有效的css selector
例如,如果我们想确保它是一个 div:
e.target.matches('div.dynamic');
请看下面的演示:
// Add some dynamic divs
const getDiv = (content) => {
const div = document.createElement('div');
div.className = 'dynamic';
div.innerHTML = content;
return div;
};
const setMessage = (msg) => document.querySelector('.clicked').innerText = msg;
document.addEventListener('DOMContentLoaded', () => {
const container = document.querySelector('#container');
for(let i = 0; i< 10; i++) {
container.appendChild(getDiv(`Dynamic ${i}`));
}
});
// Use event delegation
document.addEventListener('click', (e) => {
if(e.target.matches('.dynamic')) {
setMessage(`Clicked a dynamic div - text ${e.target.innerText}`);
}
else {
setMessage('Click was not on dynamic');
}
});
.clicked {
height: 20px;
border: 1px solid red;
}
.manual {
background-color: blue;
color: white;
}
<div class="clicked"></div>
<div class="manual">Manual</div>
<div class="manual">Manual</div>
<div id="container"></div>
推荐阅读
- linux - Bash 检查环境变量设置在一组 env vars 中
- html - How do I get HTML content to scale along with its containing WebBrowser control in WPF?
- django - django动态表单初始属性不被尊重
- python-3.x - 我正在使用 Python、Pyspark 包来计算一个非常大的数据文本文件中的单词
- android - 不同的不适用于 Kotlin 中的 ArrayList
- reactjs - 如何在同一页面上实现不同的模态表单?
- eclipse - 每个项目的 Eclipse 编辑器背景颜色
- sql-server - VS Code 和 macOS 错误:“此平台不支持 LocalDB”
- wpf - Prism WPF 登录窗口关闭
- python - 在 Python 中创建线条动画