如何在React渲染中呈现HTMLDocument类型

时间:2017-03-20 20:26:17

标签: javascript html reactjs dom xpath

我有类似的东西

public render(){

  let htmlRender = "<html><body><h2>Children</h2>Joe has three kids:<br/><ul><li>Linn Fenimore Cooper Cary (married writer <a href='Ved Mehta'>Ved Mehta</a> in 1983)</li><li>kid2</li><li>kid3</li></ul></body></html>";

  const doc  = new DOMParser().parseFromString(htmlRender,'text/html');


  let ele = doc.evaluate("/html/body/ul/li[1]/a[1]", doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  ele.singleNodeValue.style.background = 'pink';

  return (
        <div className="details-block context-block">
            <h5>Context</h5>
            <div dangerouslySetInnerHTML={{__html:doc.body.toString()}} /> --> This returns [object HTMLBodyElement]
        </div>
    );
}

这就是我上面所做的 - 将一个html字符串转换为HTML对象。然后使用Xpath解析它。操纵它(添加颜色),然后我想显示它。但它显示为[object HTMLBodyElement]。我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我在Chrome的控制台中试用了它,我认为您的问题是doc.body.toString()

> let x = "<html>...</html>";
> let y = new DOMParser().parseFromString(x, "text/html");
> y                 // #document
> y.body            // <body>​…​</body>​
> y.body.toString() // "[object HTMLBodyElement]"

而不是toString(),请使用innerHTML(如果您需要<body/>代码,请使用outerHTML。)

> y.body.innerHTML  // "<h2>Children</h2> ..."

您正在创建一个React div元素,其中包含文字字符串内容“[object HTMLBodyElement]”而不是doc.body的内容 - doc.body.innerHTML

编辑:根据评论here,您实际应该使用new XMLSerializer().serializeToString(document) - 由您决定;无论如何。