这就是事情,
我有一个充满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的错误还是什么?
答案 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);
抓取head
:http://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]' ) );