过滤器,是将合集中符合条件的元素保存下来。如果我们想反过来,将合集中符合条件的元素排除,可以使用 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 的基础部分讲完了。我们可以随心所欲的去选择元素,对它们进行筛选,判别。获取它们的各种属性、内容,并且可以对它们的属性和内容进行设置。可以让它们按照我们的需求去发生变化,而且还可以是动态的变化……
其实我们现在可以做好多好多有趣的事情,只是可能你自己还并没有觉得。所以多动动手吧~
暂无评论内容