Javascript jQueryHTML返回null
我正试图下载一个网页并提取尸体 鉴于我有以下代码:Javascript jQueryHTML返回null,javascript,jquery,Javascript,Jquery,我正试图下载一个网页并提取尸体 鉴于我有以下代码: $.ajax({ url: someAccessiblePublicUrlOnSameWebServer, dataType: 'html', success: function (data) { //data is correct at this point var body = $(data).find('body').html(); //body is null.
$.ajax({
url: someAccessiblePublicUrlOnSameWebServer,
dataType: 'html',
success: function (data) {
//data is correct at this point
var body = $(data).find('body').html();
//body is null. why ?
}
});
调用success,数据包含预期的html,但正文始终为null。为什么?可能是你的打字错误
$.ajax({
url: someAccessiblePublicUrl,
dataType: 'html',
success: function (data) {
var body = $(data).find('body').html();
}
});
你是说:
var body = $(data).find('body').html();
请注意正文周围的单个记号。可能是您的输入有误 你是说:
var body = $(data).find('body').html();
请注意正文周围的单个记号。除非是打字错误,否则在find方法中正文周围需要引号 IE:var body=$data.find'body.html
这可能是你的问题。除非是打字错误,否则你需要在find方法的正文周围加引号 IE:var body=$data.find'body.html
那可能是你的问题。更正我上次的回答 检查这个线程 用这个,我想这会有用的
var body=$body,$data.html 更正我上次的回答 检查这个线程 用这个,我想这会有用的
var body=$body,$data.html 如果您通过Ajax调用加载HTML,它将始终以字符串形式返回数据,因此您将无法将普通jQuery选择器应用于响应。如果将数据转换为$data,您也将无法访问body,因为$data是jQuery内部clean方法剥离的body内容的集合。根据您希望对结果执行的操作,您有几个选项: 如果只想将加载的html正文附加到文档中的某个位置,可以执行以下操作:
$.get('http://your_url', function(data) {
$('.result').html(data);
});
这将只将正文内容加载到.result容器中。如果要进行任何进一步的处理,可以从那里访问选择器
如果您只想操纵未附加的片段,那么可以使用filter&get访问它的元素
$(data).filter('p').get() //will get all para DOM nodes
$($(data).filter("#test2").get()).text() //will get text of one specific dom node
另一个选项是,如果您想处理正文中的数据,那么将其作为XML处理可能会更快—对于XML处理,请参阅。
以你的例子来说,可能是这样的:
$.ajax({
url : "http://mypage",
dataType : 'xml', //change dataType to XML
success : function(data) {
//data is correct at this point
$(data).find('html').each(function() {
//here you can find whatever you want
a = $(this).find("body")
console.log(a);
})
}
})
如果您通过Ajax调用加载HTML,它将始终以字符串形式返回数据,因此您将无法将普通的jQuery选择器应用于响应。如果将数据转换为$data,您也将无法访问body,因为$data是jQuery内部clean方法剥离的body内容的集合。根据您希望对结果执行的操作,您有几个选项: 如果只想将加载的html正文附加到文档中的某个位置,可以执行以下操作:
$.get('http://your_url', function(data) {
$('.result').html(data);
});
这将只将正文内容加载到.result容器中。如果要进行任何进一步的处理,可以从那里访问选择器
如果您只想操纵未附加的片段,那么可以使用filter&get访问它的元素
$(data).filter('p').get() //will get all para DOM nodes
$($(data).filter("#test2").get()).text() //will get text of one specific dom node
另一个选项是,如果您想处理正文中的数据,那么将其作为XML处理可能会更快—对于XML处理,请参阅。
以你的例子来说,可能是这样的:
$.ajax({
url : "http://mypage",
dataType : 'xml', //change dataType to XML
success : function(data) {
//data is correct at this point
$(data).find('html').each(function() {
//here you can find whatever you want
a = $(this).find("body")
console.log(a);
})
}
})
这是你的真实代码吗?您正在将空的body变量传递给.find。如果数据是整个HTML文档,则在某些浏览器中查找元素时会遇到问题。这可能是您的实际代码的副本吗?您正在将空正文变量传递给.find。如果数据是整个HTML文档,在某些浏览器中查找元素时,您会遇到问题。我修复了该类型的可能重复项,但仍然存在相同的问题。您确定resultdata变量中有标记吗?我修复了该类型,但仍然存在相同的问题。您确定resultdata变量中有标记吗?修复了该类型。仍然有同样的问题。@Christofjan很奇怪。我明白问题所在。我找到了一个变通方法,使用var contents=$data.contents var body=contents[1],当然这取决于页面的结构xhtml。修复了类型。仍然有同样的问题。@Christofjan很奇怪。我明白问题所在。我找到了一个解决方法,使用var contents=$data.contents var body=contents[1],当然这取决于页面xhtml的结构。我修复了拼写错误,但仍然存在相同的问题。我修复了拼写错误,但仍然存在相同的问题。