JQuery AJax获取页面碎片查找与筛选
JQuery AJax Getting Page Fragments Find vs Filter
这是我正在测试的Ajax代码的形式。
$('body').on('submit','#sign-in', function(e) {
e.preventDefault();
var data = $(this).serialize();
var url = $(this).attr('action');
$.ajax({
//this is the php file that processes the data and send mail
url : url,
type : "POST",
data : data,
dataType:"html",
//Do not cache the page
cache : false,
//success
success : function(response,status) {
console.log($(response).filter('#dashboard'));
console.log($(response).find('#dashboard').html());
}
});
});
以下是回应。
<!DOCTYPE html>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<div id = "dashboard">
<div id = "dash2">
<h1>HELLO</h1>
</div>
</div>
</body>
</html>
根据上面的代码,成功的jQuery filter
能够获取id为#dashboard
的div,但find
返回了一个undefined
。
为什么它会那样工作?
为了您的信息,我正在使用JQuery 1.9
更新
根据Bergi的建议,我删除了返回的html的html、body和head标签,这就是我收到的错误。
未捕获错误:语法错误,无法识别的表达式:
你好
你好,菲奇jquery-1.9.0.min.js:2
<div>
的innerHTML
,因此不会解析doctype、html、head和body元素。您只得到一个结果元素的集合,由于#dashboard
是这些顶级元素之一,因此需要filter
而不是find
。
另请参阅:
- 用jquery解析完整的html页面
- 用jQuery抓取HTML文档,有可能吗
我不知道如何解决这个问题,显然有很多jQuery的怪癖。我能想到的:
- 尝试jQuery.parseXML
- 依赖
filter
从jQuery集合中获取有问题的元素。不过,由于浏览器似乎对解析内容不一致,因此应该执行类似$response[$response.is("#dashboard") ? "filter" : "find"]("#dashboard")
的操作 - 将格式错误的集合附加到某个元素和其中的
find
:$("<div/>").html(response).find("#dashboard")
- 等待
jQuery.parseHTML
- 不要发送整个HTML文档,只发送您感兴趣的
#dashboard
元素作为HTML字符串
如果您使用的是jquery 1.9,您不应该再像这样解析html:
var html = $(response);
相反,您应该使用以下内容:
var html = $.parseHTML(response);
html = $(html).find('#dashboard').html();
来自Jquery Docs 1.9:传递给jQuery()的以小于字符以外的字符开头的HTML字符串将被解释为选择器。由于字符串通常不能被解释为选择器,因此最有可能的结果是Sizzle选择器引擎抛出的"无效选择器语法"错误。使用jQuery.parseHTML()解析任意HTML
您应该使用如上所述的parseHTML。filter和find之间的区别似乎在于元素在返回的HTML片段中的位置。如果您正在查找#foo,那么如果#foo是返回HTML中的顶级元素,则使用.filter('#foo'),否则使用.found('#foo')。
相关文章:
- 正在全局范围中查找JavaScript函数
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- es6 相当于下划线查找位置
- 使用AngularJS中的筛选器更新给定的表
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 淘汰搜索/筛选
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何在不传递此信息的情况下查找被调用的元素
- Lodash 从值数组中查找数组中的值
- 如何使用JavaScript查找1和N之间的所有数字的总和
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- Dynamics CRM-在父查找为空时删除依赖查找筛选
- 如何使用从属选项集筛选查找
- 如何使用 jQuery 筛选器选择器查找表标记 td 值
- Dynamics 2013:仅显示相关实体的筛选查找
- Javascript中的筛选逻辑-在数组中查找值的范围
- 查找按类筛选的元素的上一个匹配项
- 通过筛选器在对象中查找项
- JQuery AJax获取页面碎片查找与筛选