具有什么功能()在找到元素时返回

时间:2015-02-27 06:25:38

标签: 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)时,如果孩子被找到会有什么()返回,如果找不到孩子,它会返回什么?

我为了类似的问题而搜索了SO,但却找不到一个,甚至连Jquery的文档都没有。

如果我查看Jquery源代码,我会看到:

"has": markFunction(function( selector ) {
            return function( elem ) {
                return Sizzle( selector, elem ).length > 0;
            };
        }),

这对我来说确实很有意义。

所以再次回到我的问题,has()返回什么? (当找到传递的元素时,也找不到时)?

3 个答案:

答案 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。

Fiddle here

感谢adeneo。