jQuery`.find()`找不到与该选择器匹配的元素

时间:2019-05-15 18:57:41

标签: javascript jquery html

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()应该如何工作的解释不正确?

1 个答案:

答案 0 :(得分:0)

.find()从当前选定的元素中查找后代。用伪代码,你是说:

  

找到ID为banner-message的元素   然后搜索ID为parent的孩子,然后再次搜索p元素   将背景颜色更改为绿色

如果要查找父元素,则不能从$('#banner-message')调用此元素,但是可以执行$('#parent').find('p').css('background-color', 'green');