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

时间:2011-12-24 17:24:31

标签: javascript jquery html xml dom

这就是事情,

我有一个充满HTML代码的textarea(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 removing some tags without a warning, why and how to prevent it?

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

1 个答案:

答案 0 :(得分:1)

如果您需要将整个内容作为元素,则可以尝试使用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);

抓取headhttp://jsfiddle.net/K6tR2/

的演示

原始回答

jQuery删除它并不是因为它是浏览器。此行为会因不同的浏览器而异。

您可能尝试的一件事是将整个事情放在<div>中,这样就成了您的背景......

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

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

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

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