在下面的代码片段中,为什么长度为0时应为1?
var jQueryObj = $("<p>testing</p>");
// Display the length
$('body').html($("p", jQueryObj).length);
<script src="http://code.jquery.com/jquery-2.2.0.js"></script>
答案 0 :(得分:3)
当您提供上下文时,您告诉jQuery在该上下文中找到p
元素,因此您的选择器将查找作为上下文子级的任何p
标记。
如果您向上下文添加容器,它将能够找到该元素。
var jQueryObj = $("<div><p>testing</p></div>");
// Display the length
$('body').html($("p", jQueryObj).length);
&#13;
<script src="http://code.jquery.com/jquery-2.2.0.js"></script>
&#13;
答案 1 :(得分:2)
当你将一个上下文传递给jQuery时,它等同于使用find
方法,该方法查看了后代元素。来自jQuery docs:
在内部,选择器上下文是使用.find()方法实现的, 所以$('span',this)相当于$(this).find('span')。
您的p
元素不是后代,因此您需要使用filter
:
jQueryObj.filter("p");
filter
方法将匹配的元素集减少到与选择器匹配的元素集(或传递函数定义的测试)。在您的情况下,匹配的元素集包含一个元素(p
),它将与选择器匹配。
答案 2 :(得分:0)
您<p>
中根本没有jQueryObj
元素。
使用jQueryObj
作为上下文将限制搜索上下文提供的选择器。它与写作相同:
jQueryObj.find('p');
在内部,当您使用语法$(selector, context)
时,jquery实际上使用.find(),如文档中所述:
在内部,选择器上下文是使用.find()方法实现的, 所以$('span',this)相当于$(this).find('span')。
进一步阅读:
答案 3 :(得分:0)
您正在原始<p>
中搜索<p>
(jQueryObj
已代表<p>
代码。)
由于原始<p>
元素中没有<p>
元素,因此您的搜索不会返回任何结果。