使用jQuery Ajax获取另一个页面div的内容
我想page.html to ajax-request side.html的内容并提取其两个div的内容。 但是我无法找到解析响应的正确方法,尽管我尝试了一切。
这是side.html:
Useless ContentA ContentB
这是page.html
Useless Hello jQuery.ajax({ url: "side.html", success: function(result) { html = jQuery(result); alert(html.find("div#a").attr("id")); alert(html.find("div#a").html()); alert(html.find("div#a")); }, });
当我访问这个页面时,我没有得到任何错误,并且三个alert()s产生undefined,undefined和[object Object]。 我究竟做错了什么? 示例就在这里 。
您需要更改此行:
html = jQuery(result);
对此:
html = jQuery('').html(result);
实际上,你应该将它声明为局部变量:
var html = jQuery('').html(result);
说明
当你执行jQuery(result)
,jQuery会拉出元素的子元素并返回这些元素周围的包装器,而不是返回
元素的jQuery包装器,我倾向于认为它非常愚蠢。
在您的情况下,sidebar.html的包含几个元素和一些文本节点。 因此,返回的jQuery对象是这些元素和文本节点的包装器。
当您使用.find()
,它会搜索由您调用它的jQuery对象包装的元素的后代 。 在您的情况下,
不是其中之一,因为它实际上是包装器的选定元素之一,并且不能是它自身的后代。
通过将其包装在您自己的
中,然后将这些元素“向下”推到一个级别。 当您在上面的固定代码中调用.find()
时,它会查找该
后代,因此会找到您的
。
评论
如果您的
不在顶级,即的直接子级,那么您的代码就可以了。 对我而言,这是不一致的,因此行为不正确。 要解决这个问题,当jQuery正在使用
内容提取魔法时,它应该为你生成容器
。
试试这个 :
$.get(url,function(content) { var content = $(content).find('div.contentWrapper').html(); ... }