我正在进行ajax调用来获取内容并像下面这样添加内容:
$(function(){ var site = $('input').val(); $.get('file.php', { site:site }, function(data){ mas = $(data).find('a'); mas.map(function(elem, index) { divs = $(this).html(); $('#result').append('' + divs + ''); }) }, 'html'); });
问题是,当我进行更改时a,body我什么也没得到(没有错误,只有html)。我假设body是一个标签,就像“ a”一样?我究竟做错了什么?
a
body
所以这对我有用:
mas = $(data).find('a');
但这不是:
mas = $(data).find('body');
恐怕通过jQuery对象(即$(data))解析返回的HTML 以获取body标记注定会失败。
$(data)
原因是返回的data是string(try console.log(typeof(data)))。现在,根据jQuery文档,当从包含复杂HTML标记的字符串创建jQuery对象时,诸如的标签body可能会被剥离。发生这种情况的原因是,为了创建对象,实际上将HTML标记插入了DOM,该DOM不允许使用此类附加标签。
data
string
console.log(typeof(data))
文档中的相关报价:
如果将字符串作为参数传递给$(),则jQuery会检查该字符串以查看其外观是否类似于HTML。 […]如果HTML比不带属性的单个标签复杂,如上面的示例所示,则元素的实际创建由浏览器的innerHTML机制处理。在大多数情况下,jQuery创建一个新元素并将该元素的innerHTML属性设置为传入的HTML代码段。当参数具有单个标签(带有可选的关闭标签或快速关闭标签)时— $(“ <img / >“)或$(” <img>“),$(” <a> </ a>“)或$(” <a>“)— jQuery使用本机JavaScriptcreateElement()函数创建元素。 当传递复杂的HTML时,某些浏览器可能不会生成完全复制提供的HTML源代码的DOM。如前所述,jQuery使用浏览器的.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html>,<title>或<head>元素结果,插入的元素可能不代表所传递的原始字符串。
如果将字符串作为参数传递给$(),则jQuery会检查该字符串以查看其外观是否类似于HTML。
[…]如果HTML比不带属性的单个标签复杂,如上面的示例所示,则元素的实际创建由浏览器的innerHTML机制处理。在大多数情况下,jQuery创建一个新元素并将该元素的innerHTML属性设置为传入的HTML代码段。当参数具有单个标签(带有可选的关闭标签或快速关闭标签)时— $(“ <img / >“)或$(” <img>“),$(” <a> </ a>“)或$(” <a>“)— jQuery使用本机JavaScriptcreateElement()函数创建元素。
$(“ <img / >“)
$(” <img>“
$(” <a> </ a>“
$(” <a>“)
当传递复杂的HTML时,某些浏览器可能不会生成完全复制提供的HTML源代码的DOM。如前所述,jQuery使用浏览器的.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html>,<title>或<head>元素结果,插入的元素可能不代表所传递的原始字符串。
<html>
<title>
<head>