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 prototype原型操作笔记
Dec 07 Javascript
jQuery 渐变下拉菜单
Dec 15 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
基于Three.js插件制作360度全景图
Nov 29 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
angularjs下拉框空白的解决办法
Jun 20 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
Jan 31 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 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+mysql保存和输出文件
2006/10/09 PHP
一个ubbcode的函数,速度很快.
2006/10/09 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
python通过线程实现定时器timer的方法
2015/03/16 Python
Python实现读取并保存文件的类
2017/05/11 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
flask实现验证码并验证功能
2019/12/05 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
基层干部十八大感言
2014/01/19 职场文书
家电业务员岗位职责
2014/03/10 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
golang json数组拼接的实例
2021/04/28 Golang