嘿,伙计们,我正试图构建一个小片段来告诉我,如果给定的父元素有一个子元素,我仍然只是在调试一些东西,以了解Jquery和JS是如何工作的
$(document).ready(function(){
var str_dv = $('#la');
$('p , span').on('click' , function(e){
// console.log( str_dv,e.target , str_dv.has(e.target), !str_dv.has(e.target).length)
if (str_dv.has(e.target).length > 0) {
console.log('has the element');
}
});
});
我只是好奇,但当我说parent.has(child)
时,如果找到孩子,has()会返回什么,如果没有找到孩子,它会返回什么?
我向SO询问了一个类似的问题,但找不到,甚至连Jquery文档都找不到。
如果我查看Jquery源,我会看到:
"has": markFunction(function( selector ) {
return function( elem ) {
return Sizzle( selector, elem ).length > 0;
};
}),
这对我来说没有多大意义。
再次回到我的问题,has()返回了什么?(当找到传递的元素时,也当找不到时)?
has()返回了什么
根据文件,
将匹配的元素集减少为具有与选择器或DOM元素匹配的子体的元素集。
因此,has通过具有其选择器被传入的子元素的元素来过滤匹配集中的元素。
例如,选择器是:
$("li").has("ul");
这将只选择li元素,其中包含ul元素。
Demo For具有选择器
.has()
将返回一个具有匹配元素的对象。它是这样的,所以它可以用于链接。
根据jQuery官方文档,.has()
的作用是:
将匹配的元素集减少为具有与选择器或DOM元素匹配的子体的元素集。
看看这个演示:
console.dir($('div').has('p')); // check what it returns in the console
console.dir($('div').has('span')); // check what it returns in the console
if($('div').has('p').length){ // used as a condition
alert('This "div" has a "p".');
}
if($('div').has('span').length){ // used as a condition
alert('This "div" has a "span".');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<p>test</p>
</div>
点击此处查看官方文档:http://api.jquery.com/has/
当我们使用has()函数时,如下所示:
我的问题实际上不是has()函数是如何工作的,而是以下测试何时返回true或false:
$('div').has('p').length > 0
$('div').has('p')
,并且p确实是$('div')的子级,Jquery返回一个属性为length:1的对象,因此下面的测试将为true。
$('div').has('p').length > 0
但当p不是$('div')的子级时,Jquery将返回一个属性为0的对象,因此$('div').has('p').length > 0
将返回false。
在这里摆弄
谢谢阿。