第一百六十章 是否,有吗?

过滤器,是将合集中符合条件的元素保存下来。如果我们想反过来,将合集中符合条件的元素排除,可以使用 not 方法。用起来和过滤器各种一样,只是效果相反。

然后,又没有然后了。


不过有一个小问题,在我们的印象中,not 和 is 算是相对的。那么 is 这个方法是做什么的?然后一看文档,发现这还是一个需要注意的点,看起来相对的两个单词,对应的功能却并不相干。

is 方法用来判断合集中至少有一个元素符合后面的条件,只要有一个符合,就会返回 true,否则为 false。发现区别了,我们最近几章所讲的方法,都是对元素的查找,或者对元素合集的筛选,最后获得的都是一个新的合集。但现在这里出现了布尔型,也就意味着这个方法和我们现在在学的内容,不是同一类的。因为在名字上很相关,于是就拿过来了。

不过很好,is 后面小括号里的条件,和 filter 或者 not 都是一样的。但它重在判断,而不是筛选。虽然合集中,有一个元素符合,就会返回为真,但常常我们会把它用在合集的遍历之中,用来对合集中的元素进行逐个判断,比如:

$('a').each(function(){if($(this).is('.miao')){console.log('当前元素的 Class 是 miao')}})

所以这就是一个判断元素是不是的方法。


还有一个用来筛选元素的方法,叫作 has,说的是当前元素是否具有符合条件的后代元素,如果有,则保留当前元素,否则排除。

这个方法使用 filter 是完全可以替代的,只是写起来会比较麻烦,我们要使用函数条件,去对每一个元素进行 find,就是在它的后代元素中进行查找,如果查找的结果不为空,那么条件成立。这样写起来就很麻烦,但是这种筛选的方法应该也很常用,所以就有了这个更加简便的 has

$('a').has('span')

这样就是查找所有里面有 span 元素的链接。小括号中的条件,可以是选择器,可以是元素,也可以是 jQuery 对象。

所以这就是一个让我们能够比较偷懒的办法,偷懒这种事情还是很好理解的。


在看文档的时候,会发现一个挺类似的方法,只是名字上类似,叫作 hasClass。但是这个方法并不是用作筛选,而是判断。诶,和 is 很像的。

它用来判断合集中是否有至少一个元素具有对应的类。所以返回的也是一个布尔值,通常我们也会像 is 一样将它放在遍历中,去对元素进行逐个判断。

$('a').each(function(){if($(this).hasClass('miao')){console.log('当前元素的 Class 是 miao')}})

这里有几个细节需要注意,hasClass 的参数是类的名字,而不是选择器,所以不需要用 .。你会发现我举的例子,hasClass 和 is 用起来十分像,但它们是有很大区别的,hasClass 可以认为是 is 中一个最常用功能的简化。而 is 则十分强大,可以用于判别各种情况,各种条件。


到这里,可以说我们已经把 jQuery 的基础部分讲完了。我们可以随心所欲的去选择元素,对它们进行筛选,判别。获取它们的各种属性、内容,并且可以对它们的属性和内容进行设置。可以让它们按照我们的需求去发生变化,而且还可以是动态的变化……

其实我们现在可以做好多好多有趣的事情,只是可能你自己还并没有觉得。所以多动动手吧~

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容