【问题标题】:innerHTML and outerHTML property on HTMLElement return undefined with no errorHTMLElement 上的 innerHTML 和 outerHTML 属性返回未定义且没有错误
【发布时间】:2018-05-13 15:28:39
【问题描述】:

目标:将HTML作为字符串,编辑其中图片标签的一些属性,将HTML作为字符串返回。

我的功能如下:

private resolveImagesInHTML (body: string): string {

    let htmlParser = new domParser.DOMParser();     // from react-native-html-parser
    let parsedDOM: HTMLDocument = htmlParser.parseFromString('<html>' + body + '</html>', 'text/html');

    // ------- code to modify DOM goes here -------

    return parsedDOM.documentElement.innerHTML;
}

问题:如果我在调试控制台中打印 parsedDOM 或 parsedDOM.documentElement, 它正确显示修改后的 HTML 内容。出奇, innerHTML 或 outerHTML 属性不会引发错误但会返回 '未定义'。

我的明显猜测是,我可能在修改代码时弄乱了 HTML 的格式,但即使我在函数中注释除上面三行之外的所有内容,行为仍然相同。

我在这里可能做错了什么? 谢谢,我对 React-Native 和 typescript 还很陌生,所以如果我在这里遗漏了一些琐碎而明显的事情,我不会感到惊讶。

【问题讨论】:

    标签: javascript html typescript react-native html-parsing


    【解决方案1】:
    htmlParser.parseFromString
    

    返回看起来像 DOM 的东西,它有一些与 DOM 相同的方法,但不是全部。它没有.innerHTML。真正的浏览器 DOM 都有。

    从这里写的https://www.npmjs.com/package/react-native-html-parser innerHTML 不可用

    那么为什么它不抛出错误呢?因为这就是 JavaScript 对象的工作方式。

    console.log({}.innerHTML) // No Error
    

    如何强制出错?

    有两种解决方案,一种是使用严格模式并在控制台中启用严格模式警告。另一种是用Proxys 包装东西,例如检查hasOwnProperty

    【讨论】:

    • 谢谢。相同的链接指出存在属性“documentElement”,该属性返回一个扩展元素的 HTMLElement,并且元素具有“innerHTML”属性。所以我认为这应该可行。这里有什么适合我的解决方案吗?
    • 找到另一个更好的包,或者改进现有的。文档并不总是完美的。
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2012-03-25
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多