首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ref获取子元素

Ref获取子元素
EN

Stack Overflow用户
提问于 2019-03-19 21:08:11
回答 2查看 4.3K关注 0票数 0

我有一个div容器,它包装了呈现如下内容的第三部分组件

代码语言:javascript
复制
<div id="selector">
 <div id="selector-1"/>
 <div id="selector-2"/>
 <div id="selector-3"/>
</div>

我为div容器创建了一个ref,我可以很好地访问它。但是如何使用引用来访问特定的子元素,比如selector-2呢?可以直接将ref元素添加到渲染子组件(第三部分组件)中吗?目前,我使用选择器(‘document.getElementById-2’)来访问该元素。

代码语言:javascript
复制
<div ref={this.myref}>
  <ThirdpartyComponent/>
</div>
EN

回答 2

Stack Overflow用户

发布于 2019-03-19 21:22:24

您可以使用ReactDOM.findDOMNode()Element.querySeletorAll()来做到这一点。下面是一个演示

代码语言:javascript
复制
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);
代码语言:javascript
复制
<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>

票数 1
EN

Stack Overflow用户

发布于 2019-03-19 22:34:31

只有VanillaJS..。

不知道为什么除了使用getElementById通过id直接访问之外,还需要其他东西,但是您可以处理外部div的子元素的列表,查找具有给定id (或任何其他)属性值的元素,或者通过子集合中所需的索引位置来查找元素。

代码语言:javascript
复制
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或子项列表中的索引来查找所需的项。

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55241853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档