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实现的网页局布刷新效果
Dec 01 Javascript
根据鼠标的位置动态的控制层的位置
Nov 24 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
荐书|您有一份JavaScript书单待签收
Jul 21 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 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正则表达匹配中文问题分析小结
2012/03/25 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
Python中的默认参数实例分析
2018/01/29 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python 通过文件夹导入包的操作
2020/06/01 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
公司业务员岗位职责
2014/03/18 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
初中化学教学反思
2016/02/22 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL