当元素被找到时,has()究竟返回了什么

  • 本文关键字:究竟 返回 has 元素 jquery
  • 更新时间 :
  • 英文 :


嘿,伙计们,我正试图构建一个小片段来告诉我,如果给定的父元素有一个子元素,我仍然只是在调试一些东西,以了解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。

在这里摆弄

谢谢阿。

最新更新