使用jQuery解析无效的HTML,而不添加到DOM?

我正在研究一个使用HTML模板的jQuery插件。 最终用户可以传入一个模板,该模板查看最简单的级别,如下所示:

   

该模板应该被注释掉,以便浏览器不会尝试渲染任何东西,我的代码只是将注释的内部提取为文本,然后使用jQuery将其解析为元素树。 然后我做了具体的替换。

我记得读过jQuery只是使用DOM来解析HTML,例如当你这样做时

 var x = $(html_string); 

jQuery实际上只是将它添加到DOM来获取元素。 上面的简单操作不会呈现任何内容(直到我实际在DOM中的某处添加了x ),但是这段代码导致浏览器尝试加载图像目标 – 即使我从未将它添加到DOM中。 以下是此效果的简单演示: http : //jsfiddle.net/b5HGU/

所以基本上 – 有什么方法可以解决这个问题吗? 你可以使用jQuery创建一个带有已知坏src标记的“image”元素,但是在你真正将它添加到真正的DOM之前不要加载它吗?

另一个替代方法是使用jQuery构造DOM 之前模板上完成所有解析,作为字符串。 这当然是可行的,但实际上模板有许多不同的组件,在输出解析版本之前使用jQuery选择器将其转换为可导航树非常方便。 我必须基本上编写自己的XML解析器。 在我这么做之前,只是想知道是否有任何简单的解决方案。

尝试调用$.parseXML ,它应该将其视为原始标记而不解释任何内容。

我怀疑它需要格式良好。

这是非常老的线程,但我今天遇到了同样的问题。 我找到了一些解决方案 – 使用jquery解析html而不加载所有这些资产,图像等。它不是最优雅的解决方案,但无论如何它都可以工作。

 var parser = new DOMParser(); //i assume your html-string is in resp variable var doc = parser.parseFromString(resp, "text/html"); // here just css-select your element with standard method var div = doc.querySelectorAll('#mydiv'); // then you can wrap this element with jquery and do what you want var $div = $(div); 

希望能帮助到你。