嘿伙计们我正在尝试构建一个小片段来告诉我,如果给定的父元素有一个子元素,我仍然只是调试东西,了解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)
时,如果孩子被找到会有什么()返回,如果找不到孩子,它会返回什么?
我为了类似的问题而搜索了SO,但却找不到一个,甚至连Jquery的文档都没有。
如果我查看Jquery源代码,我会看到:
"has": markFunction(function( selector ) {
return function( elem ) {
return Sizzle( selector, elem ).length > 0;
};
}),
这对我来说确实很有意义。
所以再次回到我的问题,has()返回什么? (当找到传递的元素时,也找不到时)?
答案 0 :(得分:1)
has()返回什么?
根据文档,
将匹配元素集减少到具有与选择器或DOM元素匹配的后代的元素。
因此过滤了匹配集合中元素的元素,这些元素具有传入选择器的子元素。
例如,选择器是:
$("li").has("ul");
这将仅选择li元素,其中包含ul元素。
<强> Demo For has selector 强>
答案 1 :(得分:1)
.has()
将返回具有匹配元素的对象。它是这样,所以它可以用于链接。
根据the official jQuery docs,.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/
答案 2 :(得分:0)
当我们使用has()函数时如下:
我的问题实际上不是has()函数的工作方式,但以下测试何时返回true或false:
$('div').has('p').length > 0
$('div').has('p')
,而p确实是$('div')的子节点,Jquery返回一个长度为1的属性的对象,因此下面的测试将为真。
$('div').has('p').length > 0
但是当p不是$('div')的子节点时,Jquery将返回一个属性长度为0的对象,因此$('div').has('p').length > 0
将返回false。
感谢adeneo。