1

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

…但后来我想,为什么在所有内容都在的情况下使用 AJAX 进行附加请求noscript?我将尝试从noscript元素中的字符串中获取我需要的部分。起初我试过这个:

do_stuff_with($($("noscript").text()))

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

有什么方法可以从字符串中挑选元素而不发出不必要的 HTTP 请求?

4

2 回答 2

1

我相信没有办法用 jQuery 解析 HTML,而不将它添加到 DOM。但是,如果您愿意有点俗气,您可以通过在解析它之前修改 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-28T18:09:39.323 回答
1

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

说同事的建议是将我的每个包含放在单独的noscript元素中。因此,我不必解析单个长字符串中的全部内容,而是只解析我将要显示的元素。在这种情况下,如果他们在解析时开始加载图像和资源,那就没问题了。

现在看起来很简单……</p>

于 2011-09-29T14:34:29.973 回答