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 相关文章推荐
jquery自动切换tabs选项卡的具体实现
Dec 24 Javascript
javascript函数自动执行常用方法汇总
Mar 28 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
react native 原生模块桥接的简单说明小结
Feb 26 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
Vue数字输入框组件的使用方法
Oct 19 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php三元运算符知识汇总
2015/07/02 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
利用python求积分的实例
2019/07/03 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
行政人员岗位职责
2013/12/08 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
公司年会演讲稿范文
2014/01/11 职场文书
毕业设计说明书
2014/05/07 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
Apache自带的ab压力测试工具的实现
2022/07/23 Servers
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers