为什么在html()中使用jQuery对象作为参数?

时间:2017-03-29 21:16:50

标签: jquery

我最近偶然发现使用jQuery对象作为html()中的参数。根据{{​​3}},唯一可接受的类型是htmlStringfunction,但出于某种原因,以下内容仍有效:



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;
&#13;
&#13;

更新

似乎我的代码片段的机制可能被误解了,因此请提供此信息以帮助澄清。 html()将成功获取 任何 jQuery对象 - 无论其构造方式如何。您可以在下面看到我只是选择顶部div中的<span>元素并移动它。在这种情况下,不会引入htmlString

&#13;
&#13;
$('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;
&#13;
&#13;

为什么这与文档支持的内容相反?我是否遗漏了文档中的内容?

1 个答案:

答案 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);