jQuery中的HTML字符串返回错误

HTML string returning error in jQuery

本文关键字:返回 错误 字符串 HTML 中的 jQuery      更新时间:2023-09-26

这里的代码在大多数情况下都运行得很好。this.content是来自JSON的HTML字符串。

$(this.content).find('img, a[href$=".jpg"], a[href$=".jpeg"], a[href$=".JPEG"], a[href$=".png"], a[href$=".pdf"], a[href$=".PDF"]').each(function() {
});

由于某种原因,尽管这个字符串:

Packaged in lots of 10 sets
<img class="alignnone size-full" src="http://www.integra-adhesives.com/wp-content/uploads/2011/03/Sink_Fastener.jpg" alt="" width="300" />

正在让jQuery引起一场骚动。它正在投掷:Uncaught Error: Syntax error, unrecognized expression:

我使用的是jQuery v2.1.1。

有人能帮忙吗?

$(something)可以通过两种方式工作:如果something是HTML字符串,它会将其解析为DOM元素;如果它是一个选择器,它会在当前DOM中搜索与该选择器匹配的元素。如果something以一个HTML标记开头,那么它就是一个HTML字符串,否则它被认为是一个选择器。您的字符串以Packaged开头,它不是HTML标记,因此该字符串被处理为选择器,它不是有效的选择器。

您应该使用:

$('<div>' + this.content).find(...);

使得该内容将始终被视为HTML。

如果字符串确实以<开头,您甚至需要执行此操作,因为find()只搜索子体。如果你的字符串类似于:

<img src="someURL">

你做到了:

$(this.content).find("img");

它找不到它,因为图像是顶级元素。

我通过预先添加this.content = $.parseHTML(this.content);解决了这个问题。

正如Barmar所指出的,这是因为jQuery试图将字符串用作选择器。

问题是jQuery无法判断HTML是选择器表达式还是HTML。

从jQuery文档(强调我的):http://api.jquery.com/jQuery/#creating-新元素

如果将一个字符串作为参数传递给$(),jQuery会检查该字符串,看它是否像HTML(即它以<tag ... >开头)。如果没有,字符串将被解释为选择器表达式,如上所述。

因此,要将HTML识别为HTML,您应该确保它不是以文本节点开头的。为了安全起见,您可以将所有HTML都封装在<span></span>标签中。