【发布时间】:2016-09-16 11:22:27
【问题描述】:
我有这个 html:
<div>hi</div>
<div>bye</div>
我使用 jQuery 1.12.3 运行它(我怀疑版本是否重要,但它在这里供参考):
$(document).ready(function(){
var $divs = $('div');
alert($divs.length); // Expect 2, get 2
$('div:first').remove();
alert($divs.length); // Expect 2, get 2
// Why does expectation not match reality?
// Is this not triggering a DOM search?
alert($($divs).length); // Expect 1, get 2
$divs = $('div');
alert($divs.length); // Expect 1, get 1
});
注意:如果你已经做到了,那么请注意我的问题是在 jQuery 代码的 cmets 中。
我确信这相当简单,但我想以通俗的方式了解并希望获得一些直接的文档链接,因为 Google 上的所有内容都会引导我找到无穷无尽的博客文章,这些文章似乎相互复制+粘贴。
另外,为什么会这样?
html
<div>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
</div>
jQuery
$(document).ready(function(){
var $div = $('div');
alert($div.find('p').length); // expect 5, get 5
$div.find('p:first').remove();
alert($div.find('p').length); // expect 5, get 4
});
$div 不应该还包含 5 个<p>s 吗?
.find() 是否会触发对 $div 的 DOM 重新查询?
【问题讨论】:
-
$(...)会根据您传递给它的内容做很多不同的事情。 You can view the source with some comments here