我有一个div容器,它包装了呈现如下内容的第三部分组件
<div id="selector">
<div id="selector-1"/>
<div id="selector-2"/>
<div id="selector-3"/>
</div>我为div容器创建了一个ref,我可以很好地访问它。但是如何使用引用来访问特定的子元素,比如selector-2呢?可以直接将ref元素添加到渲染子组件(第三部分组件)中吗?目前,我使用选择器(‘document.getElementById-2’)来访问该元素。
<div ref={this.myref}>
<ThirdpartyComponent/>
</div>发布于 2019-03-19 21:22:24
您可以使用ReactDOM.findDOMNode()和Element.querySeletorAll()来做到这一点。下面是一个演示
class Three extends React.Component{
render() {
return(
<React.Fragment>
<div id="selector-1">One</div>
<div id="selector-2">Two</div>
<div id="selector-3">Three</div>
</React.Fragment>
);
}
}
class App extends React.Component{
myRef="comp"
render() {
return(
<div ref={this.myRef}>
<Three/>
</div>
);
}
componentDidMount = () => {
let x = ReactDOM.findDOMNode(this.refs[this.myRef]);
console.log([...x.querySelectorAll('div #selector-2')]);
}
}
const app = document.getElementById('root');
ReactDOM.render(<App>Something Else</App>, app);<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
发布于 2019-03-19 22:34:31
只有VanillaJS..。
不知道为什么除了使用getElementById通过id直接访问之外,还需要其他东西,但是您可以处理外部div的子元素的列表,查找具有给定id (或任何其他)属性值的元素,或者通过子集合中所需的索引位置来查找元素。
function getKids(eref, cId, idx) {
// kids is a list of all *direct* children of eref
var kids = eref.children;
console.log(kids);
// kid is the particular node by id attribute with value cId
var kid = null;
// find kid by id
for (var i = 0; i < kids.length; i++) {
if (cId == kids[i].id) {
kid = kids[i];
break;
}
}
// log kid found by search on id
console.log(kid);
// log kid found by index (-1 for 0 index origin)
console.log(kids[idx - 1]);
};我添加了样式,以便在页面展开的div声明中提供单击目标,以包括结束标记,以确保捕获为外部父div元素的子属性的列表元素。getKids通过id或子项列表中的索引来查找所需的项。
<div id="selector" onclick="getKids(this, 'selector-2', 2);"
style="padding:5px;width:10px;background-color:red;"
>
<div id="selector-1"></div>
<div id="selector-2"></div>
<div id="selector-3"></div>
</div>https://stackoverflow.com/questions/55241853
复制相似问题