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 相关文章推荐
Flash对联广告的关闭按钮讨论
Jan 30 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
Apr 27 Javascript
使用CSS3的scale实现网页整体缩放
Mar 18 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
js实现文字滚动效果
Mar 03 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
vue2.0 datepicker使用方法
Feb 04 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
原生js实现密码强度验证功能
Mar 18 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 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随机数生成代码与使用实例分析
2011/04/08 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
协议书范本
2014/04/23 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
机电一体化专业求职信
2014/07/22 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014年工人工作总结
2014/11/25 职场文书
2015年度党员个人总结
2015/02/14 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
初中地理教学反思
2016/02/19 职场文书