我最近偶然发现使用jQuery对象作为html()
中的参数。根据{{3}},唯一可接受的类型是htmlString
和function
,但出于某种原因,以下内容仍有效:
var htmlString = '<span>hello world</span>';
var jQueryObject = $(htmlString);
$('div').html(jQueryObject);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
&#13;
更新
似乎我的代码片段的机制可能被误解了,因此请提供此信息以帮助澄清。 html()
将成功获取 任何 jQuery对象 - 无论其构造方式如何。您可以在下面看到我只是选择顶部div中的<span>
元素并移动它。在这种情况下,不会引入htmlString
。
$('button').on('click', function() {
$('#fill-me').html($('#move-me span'));
});
&#13;
div {
height: 20px;
width: 100%;
border: 1px solid #000;
margin: 5px;
padding: 5px;
}
#move-me {
color: red;
}
#fill-me {
color: green;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="move-me"><span>Hello World</span></div>
<div id="fill-me"></div>
<button>Click to Move HTML</button>
&#13;
为什么这与文档支持的内容相反?我是否遗漏了文档中的内容?
答案 0 :(得分:1)
如果你看一下jQuery源代码,它会实现以下逻辑(我简化了一点):
if (typeof value == 'string') {
// assign the value to .innerHTML
} else {
this.empty().append(value);
}
因此,您可以向.html()
提供.append()
可接受的任何内容,.append()
可以获取jQuery对象。
这不是官方可接受的参数类型,它只是实施的意外。无法保证它将在未来的版本中继续使用。如果要将jQuery对象放入元素中,请使用.append()
:
$('div').empty().append(jQueryObject);