程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

解析和处理作为字符串输入的 DOM

发布于2022-01-25 13:56     阅读(223)     评论(0)     点赞(20)     收藏(0)


事情是这样的,

我有一个充满 HTML 代码的文本区域(ID 为“input_container”),简单的例子是:

<!doctype html>
<html>
    <head></head>
    <body>
        <a href="www.example.com">the other place</a>
    </body>
</html>

如何解析它并在 jQuery 中将其用作合法的 DOM?例如,做

$(varWithDom).find(...)

用那个 DOM?

我已经尝试过的

我尝试使用 jQuery 解析它,但发生了一件有趣的事情 - jQuery 删除了 DOCTYPE 和所有 HEAD,只剩下

        <a href="www.example.com">the other place</a>

我原来的方法在这里:jQuery HTML parser is remove some tags without a warning, why and how to prevent it?

我还没有找到解决方案。有任何想法吗?这可能是 jQuery 上的错误还是什么?


解决方案


如果您需要将整个内容作为元素,您可以尝试使用iframe.

 // create and append new iframe
var iframe = document.createElement('iframe');
document.documentElement.appendChild(iframe);

  // set its innerHTML
iframe.contentWindow.document.documentElement.innerHTML = varWithDOM;

  // grab the `window`
var win = iframe.contentWindow;

  // remove the iframe
document.documentElement.removeChild(iframe);

抓取的演示:http head: //jsfiddle.net/K6tR2/


原始答案

与其说是 jQuery 删除它,不如说是浏览器。这种行为在不同的浏览器中会有所不同。

您可能会尝试的一件事是将整个事物放在 a 中<div>,这样就成为您的上下文......

$('<div>' + varWithDom + '</div>').find(...)

现在,剥离什么并不重要(除非您实际上需要在 中的某些东西<head>),因为它都是外部的后代div

如果您不希望这样,那么您需要进行两次查询,一次使用.find(),一次使用.filter()...

var els = $( varWithDom );
var links = els.find( 'a[href]' ).add( els.filter( 'a[href]' ) );



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/295556/7644b5356d4b6264d501/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)