据说可以从string初始化一个jquery对象。处理ajax结果时经常会发生这种情况,即我试图复制http://api.jquery.com/jQuery.post/
但是,我看到了奇怪的行为:
function test() {
var content = $("<html><body><div>hello</div><div>world</div></body></html>");
alert("content.text() = " + content.text());
alert("content.html() = " + content.html());
}
第一个警告显示:content.text()= helloworld
第二个警告显示:content.html()= hello
这里发生了什么?
感谢大家的解释。我最后添加了另一层<div>
来生成<body>
的单个子项,如
<html>
<body>
<div> <=== added
<div>hello</div>
<div>world</div>
</div>
</body>
</html>
答案 0 :(得分:1)
浏览器会移除这些html
和body
元素。 content
集合只有2个div
个元素。
传递复杂的HTML时,某些浏览器可能无法生成完全复制所提供的HTML源的DOM。如上所述,jQuery使用浏览器的
.innerHTML
属性来解析传递的HTML并将其插入到当前文档中。在此过程中,某些浏览器会过滤掉某些元素,例如<html>
,<title>
或<head>
元素。因此,插入的元素可能无法代表传递的原始字符串。
这是content
集合的字符串表示形式:
content.map(function() { return this.outerHTML || this.nodeValue; }).get().join('');
// -> <div>hello</div><div>world</div>
.text()
方法返回集合中所有元素的textContent/nodeValue
:
content.text(); // -> helloworld
.and .html()
方法返回集合中第一个元素的innerHTML
:
content.html(); // -> hello
答案 1 :(得分:0)
这是您content
对浏览器的看法:
"content = " Object { 0: <div>, 1: <div>, length: 2 }
基本上这是一种2元素的集合。
这就是http://api.jquery.com/html/所说的:
获取匹配元素集中第一个元素的HTML内容