在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的错误吗?还是我对.find()
应该如何工作的解释不正确?
答案 0 :(得分:0)
.find()
从当前选定的元素中查找后代。用伪代码,你是说:
找到ID为
banner-message
的元素 然后搜索ID为parent
的孩子,然后再次搜索p
元素 将背景颜色更改为绿色
如果要查找父元素,则不能从$('#banner-message')
调用此元素,但是可以执行$('#parent').find('p').css('background-color', 'green');