jQuery中的HTML字符串返回错误
HTML string returning error in jQuery
这里的代码在大多数情况下都运行得很好。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>
标签中。
- CKFinder 3为所选文件返回错误的URL
- WebView返回错误的window.innerHeight
- 使用ajax上传的文件返回错误,但使用c#在asp.net的服务器端正常提交的文件
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- sqlite查询返回错误-can'我不知道为什么
- Javascript返回错误的Date值(NodeJS)
- javascript getDate getMonth返回错误的月份
- 函数返回错误'令牌{'
- 为什么我在Cloud9中的http请求总是返回错误
- 当jQuery返回错误时,如何在jQuery中重新发送ajax请求
- ontouchend-ios返回错误的坐标
- node.js mongojs findOne回调返回错误为null
- jQuery Ajax+经典ASP返回错误'意外的输入结束'
- 如果URL's链接返回错误
- 时刻.js时区值返回错误的时间戳
- 简单的jquery不起作用,并返回错误
- 在回调返回错误中带有点的 JSONP
- 在页面发布到服务器并返回错误后保留 javascript 更改
- web2py服务器返回错误,但已提交查询
- Javascript错误-左移位返回错误的输出