代码之家  ›  专栏  ›  技术社区  ›  Sachin

在动态HTML的子元素中添加属性

  •  1
  • Sachin  · 技术社区  · 6 年前

    我正在从服务器API获取HTML,并在该HTML中添加 target="_blank" 对于一个锚进入一个分区。我想做前端由于一些限制,所以请让我知道如何做。

    我尝试了以下方法,但我不喜欢它,因为它是一个水疗中心,它可以有其他元素与这个类名。

    1. componentDidMount() { document.getElementsByClassName('download_div')[0] .getElementsByTagName('a')[0] .setAttribute('target', '_blank') }

    2. 我也可以用 ReactDOM.findDOMNode(this) . 但是访问dom节点和操作是与react样式相反的。所以我没有去。

    1 回复  |  直到 6 年前
        1
  •  1
  •   stef    6 年前

    可以使用正则表达式查找需要附加属性的元素,然后使用 dangerouslySetInnerHTML 输出结果。

    例如:

    componentDidMount() {
      const apiHtml = fetch('/my_api').then((apiHtml) => { 
        // fetch the raw HTML you want
        this.setState({apiHtml})
      })
    }
    
    render() {
      const rawHtml = this.state.apiHtml.replace('<a href', "<a target='_blank' href")
      return (
        <div>
          {this.state.apiHtml && <div dangerouslySetInnerHTML={{__html: rawHtml}} />}
        </div>
    
      )
    }
    

    或者,更复杂的方法是使用 react-html-parser

    import ReactHtmlParser, { processNodes, convertNodeToElement, htmlparser2 } from 'react-html-parser';
    
    function transform(node) {
      if (node.type === 'a' &&) {
        return convertNodeToElement(node, index, transform); // Alter the object here to suit your needs
      }
    }