JQuery学习笔记 nt-child的使用


Posted in Javascript onJanuary 17, 2011

在使用JQuery的时候如果你想寻找某个容器(诸如div或者是table中的某些子元素),那么很容易就使用find方法。find将使用迭代的方式寻找所有符合条件的子元素,并且可以统一、批量的设置css等内容。
比如有这样一个table:

<table id="outer"> 
<tr> 
<td> 
<table id="nested"> 
<tr> 
<td> 
内嵌Table,行1列1 
</td> 
<td> 
内嵌Table,行1列2 
</td> 
</tr> 
<tr> 
<td> 
内嵌Table,行2列1 
</td> 
<td> 
内嵌Table,行2列2 
</td> 
</tr> 
</table> 
</td> 
</tr> 
<tr> 
<td> 
第一个Table,行2列1 
</td> 
<td> 
第一个Table,行2列2 
</td> 
</tr> 
</table>

现在要求把所有的字体设置成蓝色,直接这样做即可。
$("table").css("color", "blue");
注意:$("table")表示页面上“每一个table“都这样设置。

下面看一个复杂的例子——
【把每个table的第二行第二列的字体设置成红色】

或许你可能为这样思考——因为$("table")表示“每一个table”,因此如果写成“$(table tr:eq(1) td:eq(1)).css("color","red");就可以大功告成(每一个table的第二行第二列)……
真的是这样吗?你如果运行一下结果,便大吃一惊——因为只有“内嵌Table,行1列1“变成了红色!这根本不是我们预期的结果。
为什么呢?道理很简单——因为JQuery如果通过空格分割html标签或者其它相关属性,意味着是从“父标签”中逐个寻找自标签,满足条件为止。结果就变成了“在父table中寻找所有的tr,找出满足条件的第二个tr,然后寻找第二个tr中的第一个td,并且染成红色!”

下面给出完整定义——
$("HTML标签,html子标签:eq(n) html子子标签:eq(n)……):从HTML标签(父)寻找满足条件的第n+1个子标签,然后在第n+1个子标签中寻找第n+1个子标签……直到全部遍历为止。
因此这种方法是错误的,初学者尤其容易犯哦。

那么应该怎么办呢?有人想到了这个方法——

$("table").each(function () { 
$(this).find("tr:eq(1) td:eq(1)").css("color", "red"); 
});

他的理由是:遍历每一个table,然后把每一个table的第二行第二列设置颜色。

相比第一个答案,第二个人似乎聪明了一点,他感悟到“table”父标签不会自行重复寻找(JQuery在前套标签的时候只会深度遍历最里边的那个标签,也就是蓝色定义的“……”那个无穷大的部分)。因此想到用each——诚然,each的确解决了深度遍历table的问题,但是第一个table的find依旧是按照蓝色部分思路执行(依旧寻找父table中第二个tr,第二个tr中的第二个td),所以find也是只有末尾HTML进行深度遍历。

此时我们只能使用这样的方法:
$("tr:nth-child(2) td:nth-child(2)").css("color", "red");

nth-child(n)是CSS伪类的一个方法,可以用于JQuery,这个代码的意思是:寻找离开第n个tr最近的容器元素,然后对自己进行设置。
这样一来,“tr:nth-child(2)”将分别对应两个<table>。从而可以设置样式了。

Javascript 相关文章推荐
js类型检查实现代码
Oct 29 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
Apr 26 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
vue中element 上传功能的实现思路
Jul 06 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 #Javascript
基于jquery的返回顶部效果(兼容IE6)
Jan 17 #Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
Jan 17 #Javascript
Jquery知识点二 jquery下对数组的操作
Jan 15 #Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
Jan 15 #Javascript
JavaScript去掉数组中的重复元素
Jan 13 #Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 #Javascript
You might like
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
jQuery live
2009/05/15 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
angular分页指令操作
2017/01/09 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
python微信好友数据分析详解
2018/11/19 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL