jQuery过滤方法
除了选择器之外,jQuery还为我们提供了以“方法”(类似于函数方法)形式存在的2种方式:(1)过滤方法;(2)查找方法。
过滤和查找这2类方法与之前所学到的“选择器”是相互补充的关系。过滤和查找补充了很多使用选择器无法进行的操作,例如选取某一个元素的父元素、获取当前点击位置下的子元素、判断当前元素是否处于动画状态等等。这些都是很常见的操作。
在jQuery中,常见的过滤方法如下:
方法 | 说明 |
---|---|
hasClass() | 判断所选元素是否含有某个类,返回值为true或false |
eq(n) | 选择元素集合中指定下标元素,下标从0开始(选择器作用) |
is() | 判断所选元素是否有符合某个条件的元素,返回值为true或false |
not() | 选择元素集合中不符合条件的元素(选择器作用) |
filter() | 使用“自定义表达式”来选择符合条件的元素(功能多) |
has() | 使用“自定义表达式”来选择符合条件的元素(功能少) |
类过滤hasClass()
类过滤,就是根据元素的类名进行过滤操作。在jQuery中,我们可以使用hasClass()方法实现。1
2
3
4
5
6
7
8
9
10
11$().hasClass("类名")
<!-- hasClass()方法往往用于执行判断操作,判断当前jQuery对象中的某个元素是否包含了指定类名。如果包含,则返回true;如果不包含,则返回false。 -->
//案例
$(function () {
$("ul li").click(function () {
if($(this).hasClass("red")){
$(this).css("color","red");
}
})
})
下标过滤eq()
下标过滤,就是使用过滤方法来选取“元素集合”中指定下标位置的某一个元素。在jQuery中,我们使用eq()方法来实现下标过滤。1
2
3
4
5
6
7
8
9$().eq(n)
<!-- n是一个正整数,从0开始计算,表示用来选取“元素集合”中下标为n的的某一个元素。这个有点类似于JavaScript中的数组下标。 -->
//案例
$(function () {
$("li").eq(4).click(function () {
$(this).css("color", "yellow");
})
})
判断过滤is()
判断过滤,指的是根据某些条件进行判断来选取符合条件的元素。在jQuery中,我们使用is()方法来实现判断过滤。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21$().is(expression)
/*
参数expression是一个jQuery选择器表达式。
is()方法用于判断当前选择的元素集合中,是否含有符合条件的元素。如果含有,则返回true;如果不含有,则返回false。
is()方法跟hasClass()方法类似,也是用来做判断,并不能直接过滤元素。实际上,filter()方法内部也是在调用这个函数。所以,filter()方法原有的规则在这里也适用。
*/
//案例
//判断元素是否隐藏
$().is(":visible")
//判断元素是否处在动画中(非常重要)
$().is(":animated")
//判断复选框是否被选中
$("input[type=checkbox]").is(":checked")
//判断是否第1个子元素
$(this).is(":first-child")
//判断文本中是否包含helicopter这个词
$().is(":contains('helicopter')")
//判断是否包含某些类名
$().is(".red,.blue")
反向过滤not()
使用not()方法来过滤jQuery对象中“不符合条件”的元素,并且返回剩下的元素。1
2
3
4
5
6
7
8
9
10
11
12$().not(expression)
//参数expression是一个jQuery选择器表达式。
//案例
$(function () {
$("ul li").not("#red").css("color", "red");
/* 等价于代码:
$("ul li:not(#red)").css("color", "red");
*/
})
/* 反向过滤not()方法类似于jQuery的:not()选择器,not()方法也是对jQuery选择器的一种补充,使得我们更加方便灵活地操作元素。*/
表达式过滤filter()和has()
表达式过滤,就是根据需要使用“自定义表达式”的方式来选取符合条件的元素。这种自定义的表达式,可以是简单的选择器表达式,也可以是复杂的选择器表达式。
filter()方法
filter()方法是jQuery中功能最为强大的过滤方法。它可以使用表达式进行过滤,也可以使用函数返回值进行过滤。
表达式过滤
1
2
3
4
5
6
7
8filter(expression) //参数expression是一个jQuery选择器表达式
//案例:
$(function () {
$("ul li").filter("#red,#yellow").click(function () {
$(this).css("color", "red");
})
})函数过滤
1
2
3
4
5
6
7
8
9filter(fn) //fn表示函数
//案例:
$(function () {
$("ul li")
.filter(function () {return $("span", this).length == 1;})
.css("color", "red");
})
//filter(function () {return $("span", this).length == 1;})表示选择在内部子元素中span长度为1的li元素。
has()方法
1 | $().has(expression) //参数expression是一个jQuery选择器表达式。 |
jQuery查找方法
在jQuery中查找方法,主要以“当前所选元素”为基点,查找它的父元素、子元素或者兄弟元素等。过滤方法和查找方法的出现,其实就是对jQuery选择器的一种补充,提供更多的方法使得我们更加方便灵活地操作元素。
过滤方法,就是对所选元素进行进一步地筛选。查找方法,主要以“当前所选元素”为基点,查找它的父元素、子元素或者兄弟元素等。过滤方法和查找方法的出现,其实就是对jQuery选择器的一种补充,提供更多的方法以便我们更加方便灵活地操作元素。
在jQuery中,常见的查找方法共有5种:
(1)查找祖先元素;
(2)查找后代元素;
(3)向前查找兄弟元素;
(4)向后查找兄弟元素;
(5)查找所有兄弟元素;
查找祖先元素
在jQuery中,为我们提供3种查找祖先元素的方法:
(1)parent();
(2)parents();
(3)parentsUntil();
parent()
在jQuery中,我们可以使用parent()方法来查找当前元素的“父元素”。记住,元素只有一个父元素。1
2
3
4
5
6
7
8parent(expression)
//参数expression表示jQuery选择器表达式,用来过滤父元素。当参数省略时,则选择所有的父元素。如果参数不省略,则选择符合条件的父元素。
//案例:
$(function () {
$("p").parent(".lvye").css("color", "red");
//$("p").parent(".lvye")表示选择p元素的父元素,并且这个父元素必须含有类名lvye,不然不会被选中。
})parents()
1
2
3
4
5
6
7
8
9
10
11
12parents(expression)
//参数expression表示jQuery选择器表达式字符串,用来过滤祖先元素。当参数省略时,则选择所有的祖先元素。如果参数不省略,则选择符合条件的祖先元素。
//案例:
$(function () {
$("#btn").click(function () {
var parents = $("span").parents()
.map(function () { return this.tagName; })
.get().join(",");
alert("span元素的所有祖先元素为:" + parents.toLowerCase());
});
})parentsUntil()
parentsUntil()方法是对parents()方法的一个补充,它可以查找指定范围的所有祖先元素,相当于在parents()方法返回集合中截取部分祖先元素。1
2
3
4
5
6
7
8
9
10
11
12
13
14.parentsUntil(selector,filter)
/*
selector 可选。字符串值,规定在何处停止对祖先元素进行匹配的选择器表达式。
filter 可选。字符串值,包含用于匹配元素的选择器表达式。
*/
.parentsUntil(element,filter)
/*
element 可选。DOM 节点或 jQuery 对象,指示在何处停止对祖先元素的匹配。
filter 可选。字符串值,包含用于匹配元素的选择器表达式。
*/
//案例:
$("li.item-2").parentsUntil( $("ul.level-1"), ".yes" )
.css("border", "3px solid blue");
查找后代元素
在jQuery中,提供了3种查找后代元素的方法:
(1)children();
(2)contents();
(3)find();
children()方法
在jQuery中,我们可以使用children()方法来查找当前元素的“所有子元素”或“部分子元素”。1
2
3
4
5
6
7
8
9
10children(expression)
//案例:
$(function () {
$(".wrapper").hover(function () {
$(this).children(".test").css("color", "red");
}, function () {
$(this).children(".test").css("color", "black");
})
})contents()
contents()方法也是用来查找子内容的,但它不仅获取子元素,还可以获取文本节点、注释节点等。1
2
3
4
5
6.contents()
//案例:
$(function () {
$("p").contents().filter(function(){ return this.nodeType != 1; }).wrap("<b/>");
})
//找到段落中的所有文本节点,并用粗体标签包装它们。find()
find()方法能够查找所有后代元素,而children()方法仅能够查找子元素。1
2
3
4
5
6
7
8
9
10
11find(expression)
//案例:
$(function () {
$(".wrapper").hover(function () {
$(this).find(".test").css("color", "red");
}, function () {
$(this).find(".test").css("color", "black");
})
})
//$(this).find(".test")表示选择当前元素下的class为test的所有“后代元素”,既包括子元素,也包括孙元素等所有后代元素。
向前查找兄弟元素
“向前查找兄弟元素”,就是找到某个元素之前的兄弟元素。在jQuery中,为我们提供了3种向前查找兄弟元素的方法:
(1)prev();
(2)prevAll();
(3)prevUntil();
兄弟元素,指的是该元素在同一个父元素下的“同级”元素。
prev()
在jQuery中,我们可以使用prev()方法来查找某个元素的前一个“相邻”的兄弟元素。1
2
3
4
5
6$().prev()
//案例:
$(function () {
$("#lvye").prev().css("color", "red");
})prevAll()
prevAll()可以查找所选元素前面“所有”同级的兄弟元素。1
2
3
4
5
6
7prevAll(expression)
//参数expression表示jQuery选择器表达式字符串,用于过滤匹配元素。当参数省略时,则表示查找所选元素的前面“所有”的兄弟元素;当参数不省略时,则查找所选元素前面“符合条件”的兄弟元素。
//案例:
$(function () {
$("#lvye").prevAll().css("color", "red");
})prevUntil()
prevUntil()方法介于prev()方法和prevAll()方法之间.
prevUntil()方法能够选择前面指定范围的兄弟元素。1
2
3
4
5
6
7
8prevUntil(expression)
//参数expression表示jQuery选择器表达式字符串,用于过滤匹配元素。当参数省略时,则表示查找所选元素的前面“所有”的兄弟元素;当参数不省略时,则查找所选元素前面“符合条件”的兄弟元素。
//案例:
$(function () {
$("#lvye").prevUntil("#until").css("color", "red");
})
//$("#lvye").prevUntil("#until")表示以id为lvye的元素为基点,向前找到id为until的同级兄弟元素,然后选择“这个范围之间”的兄弟元素。
向后查找兄弟元素
“向后查找兄弟元素”,就是找到某个元素之后的兄弟元素。在jQuery中,提供了3种为我们向后查找兄弟元素的方法:
(1)next();
(2)nextAll();
(3)nextUntil();
next()
1
2
3
4
5$().next()
//案例:
$(function () {
$("#lvye").next().css("color", "red");
})nextAll()
1
2
3
4
5nextAll(expression)
//案例:
$(function () {
$("#lvye").nextAll().css("color", "red");
})nextUntil()
1
2
3
4
5
6nextUntil(expression)
//案例:
$(function () {
$("#lvye").nextUntil("#until").css("color", "red");
})
//$("#lvye").nextUntil("#until")表示以id为lvye的元素为基点,向后找到id为until的同级兄弟元素,然后选择“这个范围之间”的兄弟元素。
查找所有兄弟元素
查找所有兄弟元素,siblings(),使用siblings()方法来查找兄弟元素,这是不分前后的.1
2
3
4
5
6
7
8
9
10siblings(expression)
//案例:
$(function () {
$("#lvye").siblings().css("color", "red");
})
//$("#lvye").siblings()表示选择id为lvye元素的所有兄弟元素,这里的兄弟元素不分前面和后面。
$(function () {
$("#lvye").siblings(".brother").css("color", "red");
})
//$("#lvye").siblings(".brother")表示选择id为lvye元素的所有符合条件(即class为brother)兄弟元素,这里的兄弟元素不分前面和后面。