在第一、二章,详细讲解了JQuery的selector和filter,通过selector可以十分方便的从HTML文档中查找一批HTML元素,通过filter可以实现查找过滤,我们不妨将selector比做SQL中的Select语句,那么filter就相当于Where子句,本章的筛选则相当于子查询。
初学者对selector filter和JQuery筛选往往分不清楚,selector filter被用在selector expression(选择器表达式)中,是selector的组成部分,而JQuery筛选则是JQuery对象的函数。但两者的作用大同小异,都是为了更精确的得到需要的HTML元素。
1. 过滤函数
“过滤函数”这个名字很形象,用于获取JQuery对象中所包装的HTML元素的原一个子集。所有的过滤函数(JQuery 1.3.2中共8个)都要通过JQuery对象进行调用,绝大部分的过滤函数也都又返回JQuery对象,所以支持Chain的代码风格,如同Java中:
StringBuffer str = new StringBuffer();
str.append(“Hello”).append(“,”).append(“JQuery”).append(“.”).……
又如同C#中:
StringBuilder str = new StringBuilder();
str.Append(“Haha”).Append(“!”).……
又如LINQ中:
String[] linqObject = new string[]{……};
linqObject.Where(……).Count(……).……
1) eq(index)
获取JQuery对象中第index(从0开始)个元素,用JQuery对象包装后返回。使用语法:
jQuery(“selector”).eq(index)
参数index:从0开始的小标,表示获取第index个HTML元素。
返回值:JQuery对象,将第index个HTML元素包装。
eq(index)函数于:eq(index)的作用可以说是一模一样,jQuery(“selector”).eq(index)可以写作jQuery (“selector:eq(index)”),两者没有区别。
前面我们学习过JQuery对象的get(index)函数,该函数于eq(index)差别很大。get(index)函数返回JQuery对象中的第index个HTML元素,返回值就直接是该HTML元素,而eq(index)函数返回的则是第index个元素的JQuery包装,返回值是JQuery对象。
有如下HTML代码:
<p> This is just a test.</p> <p> So is this</p>
编写如下JQuery代码:
$("p").eq(1)
结果为:
<p> So is this</p>
2) hasClass(class)
检查当前JQuery对象中包含的HTML元素是否有特定的样式类,如果有则返回true。该函数会检查JQuery对象中的所有HTML元素,只要有一个元素有特定的样式类,就返回true。使用语法:
jQuery(“selector”).hasClass(class)
参数class:要查的样式类名称。
返回值:bool。
该函数通常使用于仅包含一个HTML元素的JQuery对象,用于检查该HTML元素是否有特定的样式类,根据返回结果(bool)做特定的处理,有如下HTML代码:
<div>
<div class="item-style">
<h2>ASP.NET</h2>
</div>
<div>
<span>JavaScript</span>
</div>
<div class="item-style">
<h3>Silverlight</h3>
</div>
</div>
编写如下JQuery代码:
<script type="text/javascript">
jQuery(function() {
$("div").each(function(index) {
if ($(this).hasClass("item-style")) {
$(this).css("color", "red");
} else {
$(this).css("color", "blue");
}
});
});
</script>
在所有的div中,对包含样式item-style的将字体设置为红色,没有包含该样式的将字体设置为蓝色,运行结果如下(图5-1):
图5-1
3) filter(selector)
筛选出JQuery对象中与指定的selector相匹配的HTML元素,并使用JQuery对象进行封装。该函数十分类似SQL语句中的子查询,如:
SELECT N.Isbn, N.Name, N.Author, N.Picture FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY Isbn ASC) AS ROWID,
Isbn, [Name], Author, Picture
FROM Books
) AS N
WHERE ROWID BETWEEN @StartIndex + 1 AND @StartIndex + @MaxRecords
使用语法:
jQuery(“selector”).filter(“selector”)
参数selector:标准的选择器列表(用逗号分隔)。
返回值:JQuery对象。
值得注意的是,filter(selector)函数的参数selector是一个标准的选择器列表,即每一个选择器可是“选择器”、“过滤器”的任意组合。有如下HTML代码:
<div>
<p>Hello</p>
<p>Hello Again</p>
<p class="selected">And Again</p>
</div>
编写如下JQuery代码:
$("p").filter(".selected")
执行结果为:
<p class="selected">And Again</p>
将JQuery代码改写为:
$("p").filter(".selected, :first")
执行结果为:
<p>Hello</p>, <p class="selected">And Again</p>
4) filter(function)
根据函数返回值从JQuery对象中筛选出部分HTML元素,并用JQuery对象包装结果。filter(function)会对JQuery对象中的所有HTML元素调用一次function,如果function返回true,则保留该元素,否则将元素从结果中移除。语法如下:
jQuery(“selector”).filter(function)
参数function:用于对JQuery对象进行筛选的函数。
返回值:JQuery对象。
参数function可以带一个参数(index),表示当前HTML元素的索引(从0开始),有如下HTML代码:
<div>
<p>
<span>Hello</span>
</p>
<p>How are you?</p>
</div>
编写如下JQuery代码:
$("p").filter(function(index) {
return $("span", this).length == 0;
});
找出不包含<span>元素的p元素,执行结果为:
<p>How are your?</p>
5) is(selector)
检查当前JQuery对象中的所有HTML元素,是否匹配特定的selector,如果匹配返回true,否则返回false。使用语法:
jQuery(“selector”).is(“selector”)
参数selector:标准的选择器(可以使“选择器”、“过滤器”的组合)。
返回值:bool。
该函数会检查JQuery对象中所有的HTML元素,只要有一个于selector匹配,就返回true。有如下HTML代码:
<div>
<div class="item-style">
<h2>ASP.NET</h2>
</div>
<div>
<span>JavaScript</span>
</div>
<div class="item-style">
<h3>Silverlight</h3>
</div>
</div>
编写JQuery代码:
<script type="text/javascript">
jQuery(function() {
$("div").each(function(index) {
if ($(this).is(".item-style")) {
$(this).css("color", "red");
} else {
$(this).css("color", "blue");
}
});
});
</script>
在所有的div中,对包含样式item-style的将字体设置为红色,没有包含该样式的将字体设置为蓝色,运行结果如下(图5-2):
图5-2
细心的朋友应该已经看出,该函数可以实现hasClass函数的功能。不错,在JQuery框架中,同样的一种功能往往会后多种实现方式,根据你的习惯,你可以任意的使用。但在不同的应用场景,使用不同的用法会带来更大的灵活性。
6) map(function)
将JQuery对象中的所有HTML元素转换成于这些元素相关的(如:元素的value属性)数组,参数function便是用来处理该转换,比如,我们可以将页面中所有的input 元素的值构成一个数组,就可以使用包含input元素的JQuery对象的map函数,转换为元素值的数组,语法如下:
jQuery(“selector”).map(function)
参数function:用于执行转换,函数返回值就是要转变的结果,函数上下文(this)就是当前HTML元素。
返回值:JQuery对象。
有如下HTML代码:
<div>
<form>
<input type="text" name="name" value="Eagle"/>
<input type="text" name="password" value="123"/>
<input type="text" name="url" value="http://www.eagle.com/"/>
</form>
</div>
要获取所有表单项的值,并将所有的值组成一个数组,编写如下JQuery代码:
<script type="text/javascript">
jQuery(function() {
var arr = $("input").map(function() {
return $(this).val();
}).get();
});
</script>
上述代码中,$(“input”)获取页面中所有的表单项,map函数将每一个input元素转变为该元素的值(代码:return $(this).val()),在map返回的JQuery对象(该对象封装的值文本元素,注意:文本元素也是页面中的元素部分),JQuery对象的get()方法进行拆箱,获取所有的文本元素,最为数组返回。
7) not(selector)
筛选出JQuery对象中与指定的selector不相匹配的HTML元素,并使用JQuery对象进行封装。该函数如filter(selector)使用方法相同,但结果相反,这里不再详述。
8) slice(start, [end])
获取JQuery对象中下标从start到end的所有HTML元素,即取出JQuery对象中一个连续的子集,使用语法:
jQuery(“selector”).slice(start, [end])
参数start:开始下标(从0开始),如果指定的参数小于0,则与0等效。
参数end:结束下标,参数为可选参数,如果不指定,则表示直到JQuery对象介绍。
返回值:JQuery对象。
该函数相当于多个eq(index)的组合,如o.slice(1,3),等效的JQuery代码为jQuery(o.eq(1), o.eq(2), o.eq(3)),其中o为JQuery对象。
2. 查找函数
“查找函数”于“过滤函数”及其相似,如果说“过滤函数”是获取JQuery对象的子集,那么“查找函数”则是获取JQuery对象的相关HTML元素的集合。
JQuery 1.3.2中共13个查找函数,功能包含了HTML元素操作的各个方面,另外,这13个函数的返回值都是JQuery对象类型,同样支持Chain编码风格。
1) add(expression)
用于链接多个selector所返回的HTML元素,并将最终结果封装成JQuery对象返回。现在有两个JQuery对象jQuery(“div”)、jQuery(“p”),分别封装了div和p元素,要将这两个JQuery对象合成一个,就可以使用add(selector)函数,jQuery(“div”).add(“p”) 或 jQuery(“p”).add(“div”)。使用语法:
jQuery(“selector”).add(expression)
参数selector:标准的选择器、JQuery对象、HTML元素、HTML元素数组、HTML内容。
返回值:JQuery对象。
该函数的参数十分灵活,有如下几种用法:
1. 标准的选择器,追加该选择器返回的结果(追加到原始JQuery对象,即add函数的调用者)。
2. JQuery对象,直接追加该JQuery对象(到……)。
3. HTML元素,直接追加该HTML元素(到……)。
4. HTML元素数组,直接追加该HTML元素数据(到……)。
5. HTML内容,将该HTML内容创建为HTML元素后追加(到……)。
有如下HTML代码:
<div>
<ol>
<li>.NET 2.0</li>
<li>.NET 3.0</li>
<li>.NET 3.5</li>
</ol>
<ul>
<li>WinForm</li>
<li id="wpf">WPF</li>
<li>Silverlight</li>
</ul>
</div>
要获取有序列表中所有的列表项,和ID为wpf的无序列表项,并修改其字体颜色,JQuery代码如下:
<script type="text/javascript">
jQuery(function() {
$("ol>li").add("#wpf").css(“color”,”Red”);
});
</script>
或:
<script type="text/javascript">
jQuery(function() {
$("ol>li").add($("#wpf")).css("color", "red");
});
</script>
或:
<script type="text/javascript">
jQuery(function() {
$("ol>li").add(document.getElementById("wpf")).css("color", "red");
});
</script>
上述三种方法运行结果完全一样,如下图5-3:
图5-3
另外,代码jQuery(“selector”).add(“<li>New Item</li>”)的作用等价于jQuery(“selector”).add (jQuery(“<li>New Item</li>”))。在jQuery的核心方法中,jQuery(html)表示创建html元素,但被创建的HTML元素并没有直接放在网页(DOM)中,所以网页时不会显示出来的(将HTML元素添加到页面中的方法在下一章详细讲解)。
2) children([selector])
获取JQuery对象中所有HTML元素的子元素,并使用JQuery对象进行封装。请注意,该函数不是用于获取当前JQuery对象中HTML元素的子集,而是每个HTML元素的子元素。使用语法:
jQuery(“selector”).childred([selector])
参数selector:子元素选择器,可选。如果没有提供,则获取所有的子元素。
返回值:JQuery对象。
值得注意的是,该函数于:nth-child(index)过滤器不同,:nth-child(index)过滤器用于获取元素子集。有如下HTML代码:
<div>
<p>Hello</p>
<div>
<span>Hello Again</span>
</div>
<p>And Again</p>
</div>
编写如下JQuery代码:
$("div").children()
执行结果为:
<span>Hello Again</span>
很显然,children用于找出div的子元素。
带参数的children函数也很简单,再看如下HTML代码:
<div>
<span>Hello</span>
<p class="selected">Hello Again</p>
<p>And Again</p>
</div>
编写如下JQuery代码:
$("div").children(".selected")
执行结果为:
<p class="selected">Hello Again</p>
3) closest([selector])
获取JQuery对象中每一个HTML元素于指定selector想匹配的最近的一个父元素。这句话读起来比较绕口,首先JQuery会对包装的每一个HTML元素进行循环,针对每一个HTML元素,就从该元素本身开始,根据指定的selector逐级向上级元素匹配,并返回最先匹配的元素,closest会首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,一层一层往上,直到找到匹配选择器的元素,如果什么都没找到则返回一个空的jQuery对象。使用语法:
jQuery(“selector”).closest([selector])
参数selector:用于匹配父元素的选择器,没有传递该参数表示直接查找父元素。
返回值:JQuery对象。
调用closest函数的jQuery对象中有多少个HTML元素,往往返回的JQuery对象中也有多少个HTML元素,除非没有与指定selector匹配的父元素。
closest函数对于处理事件委派非常有效,有如下HTML代码:
<style type="text/css">
.item-style{
color:Red;
font-size:1.2em;
}
span{
color:Blue;
font-size:12px;
}
</style>
……
<div>
<ol>
<li>.NET 2.0</li>
<li>.NET <span>3.0</span></li>
<li>.NET 3.5</li>
</ol>
<ul>
<li>WinForm</li>
<li>WPF</li>
<li>Silverlight</li>
</ul>
</div>
当用鼠标点击每一个LI时,让该LI添加或移除item-style样式,一种做法可以为每一个LI注册onclick事件,但这样既繁琐、又不利于程序的扩展,closest函数可以解决这种问题。现在只对列表外面的div标签注册onclick事件:
<div οnclick=”setItemStyle();”>
……
</div>
编写如下JQuery代码:
<script type="text/javascript">
function setItemStyle() {
$(event.srcElement).closest("li").toggleClass("item-style");
}
</script>
上述JavaScript代码中,event是window对象的属性,表示当前事件,event的srcElement属性表示当前被点击的HTML元素。大家可能会很奇怪,为什么点击的是Li元素,而触发的事件却是在div元素上注册呢?因为网页中事件是会冒泡的,Li元素接收到事件后,自己没有处理功能,就将事件向上级元素传递(和closest函数的查找方式一样),最后被div捕获了事件。找到事件源(srcElement)后,从事件源开始向上搜索到Li元素,并在Li元素上切换item-style样式。
在浏览器中运行该页面,并点击.NET 3.0和Silverlight两项,执行后的结果如下图5-4:
图5-4
4) contents()
查找JQuery对象中HTML元素的所有子节点(包括内容节点),而children()函数查找的是JQuery对象中HTML元素的所有子元素(不包括内容节点)。另外,contents()函数还会对iframe的内容进行查找。使用语法:
jQuery(“selector”).contents()
返回值:jQuery对象。
有如下HTML代码:
<div id="container">
Hello,<span>Frank</span>. Welcome to JQuery.
</div>
编写如下JQuery代码:
var count = $("#container").contents().size();
运行后count的值为3,表示包含三个子节点,第一个为“Hello,”文本型节点,第二个为“<span>Frank </span>”HTML元素节点,第三个为“.Welcome to JQuery.”文本型节点。
将JQuery代码改写为:
var count = $("#container").children().size();
运行后count的值为1,只包含一个“<span>Frank</span>”HTML元素。
5) find(selector)
在当前JQuery对象所包含的HTML元素中,进一步搜索特定selector所匹配的子元素,find函数会搜索每个HTML元素所有层次的子元素。使用语法:
jQuery(“selector”).find(“selector”)
参数selector:标准选择器,用于搜索子元素。
返回值:JQuery对象。
与find(selector)函数相似的函数有filter(selector)和children([selector])函数,一定要注意三者的区别:
l filter(selector):查找JQuery对象所包含的HTML元素的子集(而不是子元素)。
l children([selector]):查找JQuery对象所包含的HTML元素的子元素,但不继续搜索子元素的子元素。
l find(selector):查找JQuery对象所包含的HTML元素的所有层次的子元素。
有如下HTML代码:
<div>
<ol>
<li class="style">.NET 2.0</li>
<li>.NET <span class="style">3.0</span></li>
</ol>
<ul>
<li class="style">WinForm</li>
<li>
<div class="style">
<span>Silverlight</span>
</div>
</li>
<li>
<div>
<span class="style">Flex</span>
</div>
</li>
</ul>
</div>
使用filter函数,编写JQuery代码:
$("li").filter(".style")
返回结果为:
<li class=”style”>.NET 2.0</li>
<li class="style">WinForm</li>
而嵌套更深的HTML元素并没有包含,因为filter不搜索子元素(即Li的子元素),只过滤搜索到得Li。
使用children函数,编写JQuery代码:
$("li").children(".style")
返回结果为:
<span class="style">3.0</span>
<div class="style">
<span>Silverlight</span>
</div>
显而易见,children函数仅仅搜索HTML元素的子元素这一级,嵌套更深的子元素并没有搜索到。
使用find函数,编写JQuery代码:
$("li").find(".style")
该函数返回了所有Li子元素中(不包括LI本身,只搜索子元素),所有层次的带样式style的HTML元素。
综上所分析,find函数其实是组合选择器的另一种写法,代码$("li").find(".style")的另一种写法为$(“li .style”),执行结果完全一样。
6) next([selector])
获取JQuery对象中每一个HTML元素紧邻的后面的一个同辈元素,并使用JQuery对象封装。使用语法:
jQuery(“selector”).next([selector])
参数selector:标准选择器,用于匹配当前元素后面的同辈元素。
返回值:JQuery对象。
这个函数只返回后面那个紧邻的同辈元素,而不是后面所有的同辈元素。有如下HTML代码:
<style type="text/css">
#container{
width:600px;
}
.item-style{
border:solid 1px #98B5E2;
margin-bottom:5px;
}
.item-style .header{
background-color:#C1D2EE;
font-size:1.2em;
padding:5px;
cursor:pointer;
}
.item-style .content{
padding:10px;
color:Blue;
}
.item-style .hide{
display:none;
}
</style>
……
<div id="container">
<div class="item-style">
<div class="header">find(selector)</div>
<div class="content hide">
在当前JQuery对象所包含的HTML元素中,进一步搜索特定selector所匹配的子元素;
find(selector)函数会搜索每个HTML元素所有层次的子元素。
</div>
</div>
<div class="item-style">
<div class="header">filter(selector)</div>
<div class="content hide">
查找JQuery对象所包含的HTML元素的子集(而不是子元素)。
</div>
</div>
</div>
运行效果如下图5-5:
图5-5
上图中只显示了“header(标题)”,要在点击“header(标题)”是展开“content(内容)”部分,再点一次折叠“content”部分,编写如下JQuery代码:
<script type="text/javascript">
jQuery(function() {
$(".item-style .header").click(function() {
$(this).next().toggleClass("hide");
});
});
</script>
在浏览器中打开页面,并点击第一个标题,运行结果如下图5-6:
图5-6
代码出奇的简单,功能出奇的强大。
7) nextAll([selector])
匹配当前JQuery对象中每个HTML元素之后匹配特定selector的同辈元素,并包装成JQuery对象返回。next函数只返回该元素之后匹配特定selector的一个同辈元素,而nextAll函数则返回该元素之后匹配特定selector的所有同辈元素。使用语法:
jQuery(“selector”).nextAll(selector)
参数selector:标准选择器,用于匹配当前元素之后的所有元素,可选。如果该参数没有指定,则匹配当前元素之后的所有元素。
返回值:JQuery对象。
有如下HTML代码:
<ul>
<li>ASP.NET</li>
<li>JavaScript</li>
<li>Silverlight</li>
</ul>
要设置除第一个外的所有Li元素的样式,JQuery代码如下:
$(“li:first”).nextAll().addClass(“className”)
8) offsetParent()
返回JQuery对象中每个HTML元素的第一个用于定位的父元素(用于定位的元素指的是,position属性设置为relative或absolute的元素)。
9) parent([selector])
获取与特定selector相匹配的父元素,并使用JQuery对象包装,只查找每个HTML元素父元素这一级,所有共同的父元素不重复返回。使用语法:
jQuery(“selector”).parent([selector])
参数selector:父元素选择器,可选参数。如果没有提供参数,则直接返回父元素,如果提供的selector与父元素不匹配,则不返回任何元素。
返回值:JQuery对象。
有如下HTML代码:
<div id="container">
<ul>
<li>ASP.NET</li>
<li>JavaScript</li>
<li>Silverlight</li>
</ul>
<ol>
<li>WinForm</li>
<li>JSP Servlet</li>
<li>SQL Server</li>
</ol>
</div>
编写如下JQuery代码:
$(“li”).parent();
则返回结果为包含2个元素的JQuery对象,分别为UL和OL元素。
将JQuery代码改写为:
$(“li”).parent(“ol”);
返回结果为只包含一个ol元素的JQuery对象,因为第一个列表中LI的父元素为UL,与OL不匹配,所以不返回任何东西。
将JQuery代码改写为:
$(“li”).parent(“div”);
返回结果为一个空的JQuery对象。
10) parents([selector])
获取所有与特定selector相匹配的祖先元素,并用JQuery对象进行包装,相同的祖先元素不重复返回。使用语法:
jQuery(“selector”).parents([selector])
参数selector:标准的选择器,用于匹配祖先元素,可选。如果参数没提供,则返回所有的祖先元素,如果没有与selector匹配的祖先元素,则不返回任何元素。有如下HTML代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JQuery</title>
</head>
<body>
<div id="container">
<ul>
<li>ASP.NET</li>
<li>JavaScript</li>
<li>Silverlight</li>
</ul>
<ol>
<li>WinForm</li>
<li>JSP Servlet</li>
<li>SQL Server</li>
</ol>
</div>
</body>
</html>
编写如下JQuery代码:
$(“li”).parents();
返回结果为包含5个HTML元素的JQuery对象,即UL元素、OL元素、DIV元素、BODY元素、HTML元素,由此可见,返回了所有祖先元素。
将JQuery代码改写为:
$(“li”).parents(“ol”);
返回结果为包含OL元素的JQuery对象。
将JQuery代码改写为:
$(“li”).parents(“div”);
返回结果为包含DIV元素的JQuery对象,可见,parents函数不仅仅搜索父元素,同样也会搜索所有的祖先元素。
11) prev([selector])
获取JQuery对象中每一个HTML元素紧邻的前面的一个同辈元素,并使用JQuery对象封装。
该函数与next([selector])函数用法一样,这里不再详述。
12) prevAll([selector])
匹配当前JQuery对象中每个HTML元素之前匹配特定selector的同辈元素,并包装成JQuery对象返回。
该函数与nextAll([selector])用法一样,这里不再详述。
13) siblings([selector])
获取所有同辈元素,并包装成JQuery对象,相同的同辈元素不会重复出现,该函数比较简单,这里不再详述。
3. 串联函数
1) andSelf()
在查找到的新的JQuery对象中加入自身!这个解释十分抽象,我们使用如下代码进行说明。有HTML代码如下:
……
<style type="text/css">
.borderStyle{
border:solid 1px blue;
}
</style>
……
<div id="container">
<ul>
<li>ASP.NET</li>
<li>JavaScript</li>
<li>Silverlight</li>
</ul>
<ol>
<li>WinForm</li>
<li>JSP Servlet</li>
<li>SQL Server</li>
</ol>
</div>
……
要找出页面ID为container的DIV元素和它的子元素OL,并为他们添加样式borderStyle,JQuery代码如下:
<script type="text/javascript">
jQuery(function() {
$("#container").addClass("borderStyle");
$("#container").find("ol").addClass("borderStyle");
});
</script>
上面代码分别为DIV元素和OL元素添加样式,我们也可以使用andSelf函数将上述两行代码合为一行,代码如下:
<script type="text/javascript">
jQuery(function() {
$("#container").find("ol").andSelf().addClass("borderStyle");
});
</script>
上述代码中,andSelft的作用是:在包含OL元素的JQuery对象中加入ID为container的DIV元素。运行结果如下图5-7:
图5-8
2) end()
用于返回上一级JQuery对象,该函数也比较抽象,我们同样在下面例子中学习,有如下HTML代码:
……
<style type="text/css">
.ulStyle{
font-weight:bold;
}
.olStyle{
font-style:italic;
}
</style>
……
<div id="container">
<ul>
<li>ASP.NET</li>
<li>JavaScript</li>
<li>Silverlight</li>
</ul>
<ol>
<li>WinForm</li>
<li>JSP Servlet</li>
<li>SQL Server</li>
</ol>
</div>
分别为container中的UL元素和OL元素添加ulStyle和olStyle样式,JQuery代码如下:
<script type="text/javascript">
jQuery(function() {
$("#container").find("ul").addClass("ulStyle");
$("#container").find("ol").addClass("olStyle");
});
</script>
上述代码中,使用2行代码分别找到UL和OL元素然后再添加样式,我们也可以使用end()函数合成一行代码来完成,JQuery代码如下:
<script type="text/javascript">
jQuery(function() {
$("#container").find("ul").addClass("ulStyle")
.end().find("ol").addClass("olStyle");
});
</script>
在上述代码中,第一个addClass函数对应的JQuery对象包含UL元素,所以不能在该JQuery对象上继续查找OL元素。这里使用end()函数返回上一级,包含UL元素的JQuery对象是由find(“ul”)函数查找到得,所以就是返回到find(“ul”)函数的调用者,即$(“#container”),既然已经返回到了container,那么接着使用find(“ol”)当然可以找到OL元素。
andSelf()和end()函数在JQuery对象上下级间包含、转换时非常有用。