首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串解析为非XML HTML5而不加载子元素

将字符串解析为非XML HTML5而不加载子元素
EN

Stack Overflow用户
提问于 2011-09-29 01:34:23
回答 2查看 420关注 0票数 1

这个问题在SO上有多个版本,但它们都没有真正切中我想要做的事情的核心。启用JavaScript后,浏览器会将noscript元素的内容视为未分析的文本。我使用该元素来提供我的站点的所有内容,但是对于那些拥有JavaScript的用户,我使用AJAX加载这些内容。

…但是后来我想,既然所有内容都在noscript中,为什么还要用AJAX发出额外的请求呢?我将尝试从noscript元素中的字符串中获取所需的部分。一开始我试着这样做:

代码语言:javascript
运行
复制
do_stuff_with($($("noscript").text()))

但我很快发现,该方法会导致浏览器立即请求解析后的字符串中所有被替换的元素(图像等)。(我假设jQuery将其添加到DOM中以便对其进行解析。)然后我看了一眼$.parseXML(),但很快就放弃了这个想法,因为标记不是XML (它是非XML形式的HTML5 )。

有没有什么方法可以让我在不发出不必要的HTTP请求的情况下从字符串中精挑细选?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-29 02:09:39

我相信如果不把它添加到DOM中,就不可能用jQuery解析HTML.但是,如果您愿意让它变得有点俗气,您可以在解析之前修改noscript源代码,以避免请求不需要的/不需要的资产。

HTML

代码语言:javascript
运行
复制
<noscript>
  <span class="name">Mr. Smith</span>
  <img src="/images/02938/avatar.jpg" />
  <span class="age">27</span>
</noscript>

jQuery

代码语言:javascript
运行
复制
// 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();
票数 1
EN

Stack Overflow用户

发布于 2011-09-29 22:34:30

我的一位没有或不想要SO帐户的同事描述了一个我认为值得在这里记录的解决方案。虽然它不能准确地回答如何在不发出即时请求的情况下解析任意HTML5,但这可能是我想要的解决方案。

我的同事的建议是将我的每个includes放在单独的noscript元素中。因此,我只需要解析我要显示的元素,而不必解析单个长字符串中的整个内容。在这种情况下,如果他们在解析时开始加载图像和资源,这是很好的。

现在看起来很简单,…

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7587223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档