获取 parent 的数据集,同时单击 child
Get dataset of parent, while clicking on child
我有以下代码,其中我有一个带有 data
属性的按钮,里面有 div,我想获取按钮的数据集,无论目标有多深child.
里面
export default function App() {
const handler = (e) => {
console.log(e.target.dataset.id);
};
return (
<div className="App">
<button
data-id="myDataId"
onClick={handler}
style={{
height: 200,
width: 200,
backgroundColor: "green"
}}
>
Bruh
<div
style={{
height: 100,
width: 100,
backgroundColor: "red"
}}
/>
</button>
</div>
);
}
在此示例中,当我在 div 内部单击时,我的控制台给出未定义,但如果我单击按钮,它给出我的 data
属性。
我尝试使用 event.path
,但没有给出任何结果。
是否有任何通用的方法来获取我的按钮的数据集?
这是完整的示例:https://codesandbox.io/s/lucid-breeze-e1lh2?file=/src/App.js:23-535
import "./styles.css";
import {useRef} from 'react'
export default function App() {
const myContainer = useRef(null);
const handler = (myContainer) => {
console.log(myContainer.current.closest(".parent").getAttribute("data-id"))
};
return (
<div className="App">
<button
data-id="aaaaaaa"
className = "parent"
onClick={() => handler(myContainer)}
style={{ height: 200, width: 200, backgroundColor: "green" }}
>
Bruh
<div
ref={myContainer}
style={{
height: 100,
width: 100,
backgroundColor: "red"
}}
/>
</button>
</div>
);
}
可以使用目标的parentElement
属性
如果您不知道目标可能有多深,您可以遍历祖先直到找到它。
有个例子:
const handler = (e) => {
let target = e.target
while (target && target.tagName != 'BUTTON') target = target.parentElement
console.log(target?.dataset.id)
}
问题是我应该从 currentTarget
而不是 target
获得数据集。
区别在于 target
来自执行点击的确切元素,而 currentTarget
是设置了 onClick 的元素。
const handler = (e) => {
console.log(e.currentTarget.dataset.id); // instead of e.target
};
我有以下代码,其中我有一个带有 data
属性的按钮,里面有 div,我想获取按钮的数据集,无论目标有多深child.
export default function App() {
const handler = (e) => {
console.log(e.target.dataset.id);
};
return (
<div className="App">
<button
data-id="myDataId"
onClick={handler}
style={{
height: 200,
width: 200,
backgroundColor: "green"
}}
>
Bruh
<div
style={{
height: 100,
width: 100,
backgroundColor: "red"
}}
/>
</button>
</div>
);
}
在此示例中,当我在 div 内部单击时,我的控制台给出未定义,但如果我单击按钮,它给出我的 data
属性。
我尝试使用 event.path
,但没有给出任何结果。
是否有任何通用的方法来获取我的按钮的数据集?
这是完整的示例:https://codesandbox.io/s/lucid-breeze-e1lh2?file=/src/App.js:23-535
import "./styles.css";
import {useRef} from 'react'
export default function App() {
const myContainer = useRef(null);
const handler = (myContainer) => {
console.log(myContainer.current.closest(".parent").getAttribute("data-id"))
};
return (
<div className="App">
<button
data-id="aaaaaaa"
className = "parent"
onClick={() => handler(myContainer)}
style={{ height: 200, width: 200, backgroundColor: "green" }}
>
Bruh
<div
ref={myContainer}
style={{
height: 100,
width: 100,
backgroundColor: "red"
}}
/>
</button>
</div>
);
}
可以使用目标的parentElement
属性
如果您不知道目标可能有多深,您可以遍历祖先直到找到它。 有个例子:
const handler = (e) => {
let target = e.target
while (target && target.tagName != 'BUTTON') target = target.parentElement
console.log(target?.dataset.id)
}
问题是我应该从 currentTarget
而不是 target
获得数据集。
区别在于 target
来自执行点击的确切元素,而 currentTarget
是设置了 onClick 的元素。
const handler = (e) => {
console.log(e.currentTarget.dataset.id); // instead of e.target
};