【发布时间】:2011-08-10 15:32:04
【问题描述】:
http://jsfiddle.net/vol7ron/vZLnr/
我正在尝试找到最好的方法来解开 HTML 字符串(如 AJAX 响应),而无需先将其附加到文档中。另外,哪个最适合内存管理?
HTML
<div class="label">Start With:</div> <pre id="original"></pre> <div class="label">What's Wanted:</div> <pre id="wanted"><div>foo</div><div>bar</div></pre> <hr /> <div class="label">Attempt: .find()</div> <pre id="find"></pre> <div class="label">Attempt: .closest()</div> <pre id="closest"></pre>
CSS
.label { font : italic bold 11px Georgia; margin : 1em 0 .5em; } pre { border : 1px solid black; padding : 1em; } hr { margin : 1.5em 0 1em; } #original { background : #eee; } #wanted { background : #def; }
JavaScript
var $html= "<pre><div>foo</div></pre><pre><div>bar</div></pre>"; // No Changes jQuery('#original').html($html); // Find var $find = jQuery($html).find('*').unwrap(); jQuery('#find').html($find); // Closest var $closest = jQuery($html).closest('pre').unwrap().html(); jQuery('#closest').html($closest); // Wrapped var $pre = jQuery('pre', jQuery($html).wrap('<div />').parent() ); $pre.each(function(){ jQuery('#wrapped').append(jQuery(this).html()); }); //=========== Prettify Output =========== var $wanted = jQuery('#wanted').html(); jQuery('pre').not('#wanted, #original, #original *') .each(function(){ var t = jQuery(this); t.css({background: t.html()==$wanted?'#efe':'#fee'}); });
编辑
.find()方法需要一些工作,因为它会删除空白容器。想象一下<pre><span>Code</span> <span>Here</span></pre>,它会变成<span>Code</span><span>Here</span>(去掉空格)。
【问题讨论】:
-
你想只解开外部标签还是特定类型的标签?
-
外部标签,但如果有像
<pre>foo</pre><div>bar</div><span>foobar</span>这样的东西(许多外部标签和任何顺序)你只想要删除 div。 -
原来的问题只针对一个外部标签(例如
<pre>...</pre>),但我喜欢更健壮。
标签: javascript jquery memory