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 相关文章推荐
javascript下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
浅谈JS函数定义方式的区别
Oct 30 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
jquery中绑定事件的异同
Feb 28 Javascript
javascript DOM的详解及实例代码
Mar 06 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
Vue 401配合Vuex防止多次弹框的案例
Nov 11 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
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
php5.3 注意事项说明
2013/07/01 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
javascript实现确定和取消提示框效果
2015/07/10 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python中new方法的详解
2019/01/15 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
2014年庆元旦活动方案
2014/02/15 职场文书
班级文化建设标语
2014/06/23 职场文书
合同意向书范本
2014/07/30 职场文书
暑期培训班策划方案
2014/08/26 职场文书
市级三好学生评语
2014/12/29 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python