javascript - 如何在不实际编辑 HTML 元素的情况下添加属性
问题描述
我在 REACT 中创建了一个下面的 HTML 组件,我无法直接对其进行编辑。但我需要将一个属性添加到它的 HTML 元素之一。我也不能使用 jquery,否则它很容易使用 jQuery。
下面是我无法直接编辑的表格的基本 HTML,但我可以在我的代码中使用这个组件。
挑战:我需要为 SVG 元素添加属性。例如 -> 数据 ID =“1”。它可以用CSS或任何其他方式完成。
<TablePresenter>
<div>
<svg>this is a actually a sort button</svg>
<div>Column 1 Name</div>
</div>
<div>
<svg>this is a actually a sort button</svg>
<div>Column 2 Name</div>
</div>
</TablePresenter>
我可以编辑的主文件如下。
const MyComponent = () => {
some logic here...
Can we do something here may be CSS or any react hack to get underline component HTML change.
return(
<TablePresenter></TablePresenter>
)
}
export default MyComponent;
解决方案
不是推荐的做法,但使用 ref 可以实现这一点,示例如下:
像下面一样将包装器 div 添加到您的父组件(您自己的可以编辑的组件)并添加一个ref
,这将帮助您获取 html 内部的 DOM 引用<TablePresenter>
const divRef= useRef<HTMLDivElement>(null);
return <div ref={divRef}>
<TablePresenter></TablePresenter>
</div>
// This is an example of getting the reference of the svg.
divRef.current.firstElementChild.firstElementChild.firstElementChild
可能是这样的:
const MyComponent = () => {
const divRef = useRef<HTMLDivElement>(null);
useEffect(()=>{
divRef.current.firstElementChild.firstElementChild.firstElementChild.attributes["data-id"]=1
}, [])
return <div ref={divRef}>
<TablePresenter></TablePresenter>
<SuperChild />
</div>
}
推荐阅读
- reverse-engineering - 索尼 SRX 611 - 逆向工程串行通信
- python - 使用 AWS CDK 的 DynamoDB 复合主键
- css - 添加边框后Div停止居中
- webpack - webpack 设置出错,如何在 Next.js 中设置 webpack 5?
- ios - 为什么 Xcode 12.2 (12B45b) 在 iOS 14.1 中显示“iPhone 不可用”?
- .htaccess - Codeigniter V4 不加载公共资源
- java - 与 java 类中的模型属性混淆
- javascript - 如何检查 EJS 变量是否存在?
- php - glob 图像和按名称排序在 10 号以上不起作用
- jenkins - Jenkins Pipeline:查找函数定义