javascript - 需要检测复杂组件内部的点击并返回组件 ID
问题描述
我正在使用 react 进行开发,出于性能原因,我想捕获最顶层父级的点击。
const clickHandler = (e) => {
console.log("clickHandler", e.target) --> give me the child element in which the click occurred
}
所以即使嵌套的孩子我应该能够获得ID。而且会有1000张卡,子结构也很复杂
<div onClick={clickHandler}>
<div class="card" id="12345">
<div class="x1">
<div class="x2">
<div class="">
<span class="">
<ul class="">
</div>
</div>
<div class="card" id="67890">
<div class="x1">
<div class="x2">
<div class="">
<span class="">
<ul class="">
</div>
</div>
</div>
解决方案
如果您想在单击其中的任意位置时获取id
具有类的元素的。card
您可以使用.closest
查找所需的相关父级。
请记住,这与反应无关,而且它似乎也是一种反模式。
const clickHandler = (e) => {
const relatedCard = e.target.closest(".card");
if (relatedCard) {
console.log("clickHandler", relatedCard.id);
} else {
console.log("click happened outside of a .card element");
}
};
一个更与反应相关的解决方案是将点击处理程序放在该元素而不是容器 div 上并直接使用 id。
<div>
<div class="card" id="12345" onClick={() => clickHandler('12345')}>
<div class="x1">
<div class="x2">
<div class="">
<span class="">
<ul class="">
</div>
</div>
<div class="card" id="67890" onClick={() => clickHandler('67890')}>
<div class="x1">
<div class="x2">
<div class="">
<span class="">
<ul class="">
</div>
</div>
</div>
推荐阅读
- css - 只要 body 和 sub sub div 滚动就缩放 div
- flutter - 基于文本长度的文本宽度
- r - 从包含使用 For 循环指定文件来源的列的多个文件创建数据框
- html - 需要帮助获得部分和子部分的正确缩进
- php - 为什么这个“if”条件不会打破循环?
- xml - 在单击按钮上更改 res/values/colors.xml
- python - 在opencv中读取、预处理和保存图像到指定位置
- c# - .NET Core + Nginx 丢失 HTTP 标头
- corda - 两方之间的检查点流是否共享一个 ID?
- java - 我的代码可以在一部分代码中访问远程计算机上的 windows 共享文件夹,但不能在其他部分中访问。我可能会错过什么?