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

我从服务器api获取HTML,并且在HTML中我想将target="_blank"添加到div中的锚点。由于一些限制,我想在前端做到这一点,所以请让我知道如何做到这一点。

我尝试了以下方法,但我不喜欢它,因为它是SPA,它可以有其他元素与此类名称。

componentDidMount() {

document.getElementsByClassName('download_div')[0]

.getElementsByTagName('a')[0]

.setAttribute('target', '_blank')

}

我也可以使用ReactDOM.findDOMNode(this)。但是访问DOM节点并进行操作是违反React风格的。所以我没有去做。

答案

您可以使用正则表达式查找需要附加属性的元素,并使用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('

return (

)

}

或者,更复杂的方法是使用react-html-parser解析和转换HTML字符串

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值