【问题标题】:Possible to create custom "DOMs" by loading HTML from string in Javascript?可以通过从 Javascript 中的字符串加载 HTML 来创建自定义“DOM”吗?
【发布时间】:2010-10-17 17:55:52
【问题描述】:

我正在尝试在浏览器中解析 HTML。浏览器接收 2 个 HTML 文件作为字符串,例如。 HTML1 和 HTML2。

我现在需要解析这些“文档”,就像解析当前文档一样。这就是为什么我想知道是否可以基于这些 HTML 字符串创建自定义文档(这些字符串由服务器或用户提供)。

因此,例如以下内容将是有效的: $(html1Document).$("#someDivID")...

如果有什么不清楚的地方,请让我进一步澄清。

谢谢。

【问题讨论】:

    标签: javascript jquery html dom document


    【解决方案1】:
    var $docFragment = $(htmlString);
    
    $docFragment.find("a"); // all anchors in the HMTL string
    

    请注意,这会忽略任何文档结构标签(<html><head><body>),但任何包含的标签都可用。

    【讨论】:

    • 可能是我需要的。但是,这将如何处理脚本、html、头部标签等?不会修改这些吗?
    • @Define:“句柄”。 (脚本标签将返回但不评估/执行)
    • 基本上就是 Nikita Rybak 提到的副作用。但我想这些在这里并不适用,因为我只是在搜索一个字符串,而不是将它附加到文档中。
    • @Tom:是的。但是,您可以将返回的脚本标记附加到您的文档并执行它,但它当然会在您的文档的上下文中执行。只要你不附加它,它就只是那里作为一个分离的DOM节点。
    • 我想知道为什么我在解决类似问题时没有想到它?应该试试,谢谢。
    【解决方案2】:

    使用 jQuery 你可以做到这一点:

    $(your_document_string).someParsingMethod().another();
    

    【讨论】:

      【解决方案3】:

      你总是可以将你的 html 附加到一些隐藏的 div 中(尽管 innerHTML 或 jQuery .html(..))。它不会被完全视为新文档,但仍然可以搜索其内容。

      不过,它有一些副作用。例如,如果您的 html 定义了任何 script 标记,它们将被加载。此外,浏览器可能(并且可能会)删除htmlbody 和类似标签。

      编辑
      如果您特别需要 title 和类似标签,您可以尝试 iframe 从您的服务器加载内容。

      【讨论】:

      • 如何处理非正文元素,如标题和 javascript?这不会引起问题/冲突吗?
      • @Tom 我更新了我的答案。特别是,脚本标签很烦人:如果你从另一台服务器上抓取内容,它们现在会指向你的。
      猜你喜欢
      • 2014-03-24
      • 2018-09-07
      • 2021-02-17
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      相关资源
      最近更新 更多