在find
函数的jQuery文档中,它声明
将通过测试元素是否与此选择器匹配来筛选元素
但这似乎并不严格准确,或者我对这句话的意思做出了错误的假设。如果这是正确的,我希望下面的代码会使我的p
元素的背景变为绿色,但实际上却是红色的。
$('#banner-message').find('p').css('background-color', 'red');
document.getElementById('banner-message').querySelectorAll('#parent p')[0].style.backgroundColor = 'blue'; // but this works?
// $('#parent #banner-message').find('p').css('background-color', 'green'); // does what's expected
$('#banner-message').find('#parent p').css('background-color', 'green');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="parent">
<div id="banner-message">
<p>Hello World</p>
</div>
</div>
显然,p
元素与我给它的选择器相匹配,但看起来好像原始元素是选择器的前缀,文档中并没有说明这一点。
那么这是jQuery的一个bug吗?或者,我对.find()
应该如何工作的解释是错误的?
发布于 2019-05-16 03:08:50
.find()
从当前选定的元素中查找子项。在伪代码中,你会说:
找到ID为
banner-message
的元素,然后搜索ID为parent
的子元素,然后再次搜索p
元素,将背景颜色更改为绿色
如果您想要从父元素中查找元素,那么您不能从$('#banner-message')
调用它,但是可以使用$('#parent').find('p').css('background-color', 'green');
https://stackoverflow.com/questions/56156003
复制相似问题