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学习笔记(十七)js 优化
Feb 04 Javascript
各种常用的JS函数整理
Oct 25 Javascript
js中replace的用法总结
Dec 27 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
javascript实现滑动解锁功能
Dec 31 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 Javascript
Angular.JS中的this指向详解
May 17 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
Python中删除文件的程序代码
2011/03/13 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
晚会开幕词范文
2016/03/04 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers