这个问题在SO上有多个版本,但它们都没有真正切中我想要做的事情的核心。启用JavaScript后,浏览器会将noscript
元素的内容视为未分析的文本。我使用该元素来提供我的站点的所有内容,但是对于那些拥有JavaScript的用户,我使用AJAX加载这些内容。
…但是后来我想,既然所有内容都在noscript
中,为什么还要用AJAX发出额外的请求呢?我将尝试从noscript
元素中的字符串中获取所需的部分。一开始我试着这样做:
do_stuff_with($($("noscript").text()))
但我很快发现,该方法会导致浏览器立即请求解析后的字符串中所有被替换的元素(图像等)。(我假设jQuery将其添加到DOM中以便对其进行解析。)然后我看了一眼$.parseXML(),但很快就放弃了这个想法,因为标记不是XML (它是非XML形式的HTML5 )。
有没有什么方法可以让我在不发出不必要的HTTP请求的情况下从字符串中精挑细选?
发布于 2011-09-29 02:09:39
我相信如果不把它添加到DOM中,就不可能用jQuery解析HTML.但是,如果您愿意让它变得有点俗气,您可以在解析之前修改noscript源代码,以避免请求不需要的/不需要的资产。
HTML
<noscript>
<span class="name">Mr. Smith</span>
<img src="/images/02938/avatar.jpg" />
<span class="age">27</span>
</noscript>
jQuery
// Load raw content, make sure it's wrapped in a single node
raw = '<div>' + $('noscript').text() + '</div>';
// "Fix" any elements that might reference external resources by
// turning them into invalid HTML tags.
raw = raw.replace(/img/g, 'cheese');
dom = $(raw);
// Now we can access our variables without unnecessary resource requests
name = dom.find('.name').text();
age = dom.find('.age').text();
发布于 2011-09-29 22:34:30
我的一位没有或不想要SO帐户的同事描述了一个我认为值得在这里记录的解决方案。虽然它不能准确地回答如何在不发出即时请求的情况下解析任意HTML5,但这可能是我想要的解决方案。
我的同事的建议是将我的每个includes放在单独的noscript
元素中。因此,我只需要解析我要显示的元素,而不必解析单个长字符串中的整个内容。在这种情况下,如果他们在解析时开始加载图像和资源,这是很好的。
现在看起来很简单,…
https://stackoverflow.com/questions/7587223
复制相似问题