JQuery Tips(3) 关于$()包装集内元素的改变


Posted in Javascript onDecember 14, 2009

这两个方法是比较容易搞混的.
filter方法表示的是对当前内部的元素进行筛选,这个接受两种参数,一个返回bool的function,或者是JQuery的选择表达式,包装集内的元素只会小于等于当前包装集内的元素,并且含有的元素属于原来包装集内元素的子集:

<div id="one">the one</div> 
<div id="two"><p>the two</p></div> 
<div id="three"><p>the three</p></div> 
<script type="text/javascript"> 
alert($("div").filter(":not(:first):not(:last)").html()); //out put<p>the two</p> 
alert($("div").filter(function() { return this.id == "two"; }).html());//output <p>the two</p> as well 
</script>

而find方法却是在当前元素内(子元素)部进行查找,并返回新的包装集,这意味着包装集可能会增加:
<div id="one">the one</div> 
<div id="two"><p>the two</p><p></p><p></p></div> 
<div id="three"><p>the three</p></div> 
<script type="text/javascript"> 
alert($("div").find("p").text()); //alert "the twothe three" 
alert($("div").find("p").length); //alert 4 instead of original 3 
</script>

从上面可以看出新包装集内的元素增加了

parents()方法 VS closest()方法
这两个方法都是由当前元素向上查找所匹配的元素,不同之处如下:

<div id="wrapper"> 
<div id="two"> 
<p id="p1"> 
the two</p> 
</div> 
</div> 
<script type="text/javascript"> 
alert($("#p1").parents("div").length); //alert 2 include <div id="two"> and <div id="wrapper"> 
alert($("#p1").closest("div").length); //alert 1 and only include <div id="two"> 
alert($("#p1").parents("p").length); //alert 0 because it does not include current element 
alert($("#p1").closest("p").length); //alert 1 because it contain itself <p id="p1"> 
</script>

对于parents方法来说,会将当前元素向上的所有匹配元素加入新的包装集并返回,而closest方法只会包含离当前元素最近的元素,所以使用closest方法后当前包装集内的元素只能为1个或者0个
而parents方法并不包括当前包装集内的元素,而closest方法会包含当前包装集内的元素
直系子元素 VS 所有子元素
使用children可以返回直系子元素,而用find加通配符的方法可以返回除了文本节点之外的所有子元素:
<div id="wrapper"> 
text node here 
<div id="two"> 
<p id="p1"> 
the two</p> 
</div> 
</div> 
<script type="text/javascript"> 
alert($("#wrapper").children().length);//alert 1 because only direct children included 
alert($("#wrapper").find("*").length); //alert 2 because all desendants included 
alert($("#wrapper").find(">*").length);//alert 1 because only direct children included 
</script>

可以看出children方法只会含有当前元素的直系子元素,而使用find(“>*也会产生同样的效果”).若想采纳所有的直系子元素直接在find内传”*”通配符
回到过去的end()方法以及andself()方法
上述所有的方法,以及比如add(),next(),nextAll(),prev()等对包装集内元素进行改变的方法都可以使用end()方法来进行返回:
<div id="wrapper"> 
text node here 
<div id="two"> 
<p id="p1"> 
the two</p> 
</div> 
</div> 
<script type="text/javascript"> 
alert($("#wrapper").find(">*").end().get(0).id);//alert "wrapper" instead of "two" because of end() method has been used 
</script>

end()方法总是和最近的一个和包装集改变的方法相抵消,而抵消其他方法:
<div id="wrapper"> 
text node here 
<div id="two"> 
<p id="p1"> 
the two</p> 
</div> 
</div> 
<script type="text/javascript"> 
alert($("#wrapper").find("#p1").html("new value").end().get(0).id);//alert wrapper because end method 
alert($("#p1").text())//alert new value bacause the html method in previous has not been cancelled 
</script>

如果需要在改变包装集内元素的情况下还需要包含原始的包装集内元素,使用andself方法:
<div id="wrapper"> 
text node here 
<div id="two"> 
<p id="p1"> 
the two</p> 
</div> 
</div> 
<script type="text/javascript"> 
var $a = $("#wrapper").find("#two").andSelf(); 
alert($a[0].id);//alert two first 
alert($a[1].id);//alert wrapper after that 
</script>

我们会发现首先alert two,因为two先被选择

PS:liver writer代码高亮插件我一加中文就是乱码,很郁闷的说-.-!!所以注释都是鸟语了

Javascript 相关文章推荐
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
setTimeout()递归调用不加引号出错的解决方法
Sep 05 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
vuejs 制作背景淡入淡出切换动画的实例
Sep 01 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
微信小程序学习之自定义滚动弹窗
Dec 20 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 #Javascript
js 页面传参数时 参数值含特殊字符的问题
Dec 13 #Javascript
JQuery下关于$.Ready()的分析
Dec 13 #Javascript
javascript与asp.net(c#)互相调用方法
Dec 13 #Javascript
JavaScript 字符串与数组转换函数[不用split与join]
Dec 13 #Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
Dec 13 #Javascript
页面中iframe相互传值传参
Dec 13 #Javascript
You might like
PHP简单选择排序算法实例
2015/01/26 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
python list使用示例 list中找连续的数字
2014/01/27 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python处理PDF与CDF实例
2020/02/26 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python龙贝格法求积分实例
2020/02/29 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
年度考核自我鉴定
2014/02/02 职场文书
2014年预算员工作总结
2014/12/05 职场文书
2015年度团总支工作总结
2015/04/23 职场文书