惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
V
V2EX
爱范儿
爱范儿
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Check Point Blog
罗磊的独立博客
A
About on SuperTechFans
MyScale Blog
MyScale Blog
S
Security @ Cisco Blogs
博客园 - 聂微东
Simon Willison's Weblog
Simon Willison's Weblog
Cyberwarzone
Cyberwarzone
云风的 BLOG
云风的 BLOG
U
Unit 42
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Security Latest
Security Latest
Y
Y Combinator Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
美团技术团队
S
Securelist
P
Privacy International News Feed
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
W
WeLiveSecurity
A
Arctic Wolf
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
V2EX - 技术
V2EX - 技术

博客园 - maledong

如何通过反射调用扩展方法? 求最大公约数与最小公倍数的算法 ASP.NET专题研究——角色和Profile ASP.NET专题研究——用户登录、注册和发送密码 NET基本探究——事件 ASP.NET专题研究——登录权限 C#4.0和VS2010新特性(三) C#4.0和VS2010新特性(二) C#4.0和VS2010新特性(一) F# 快乐之旅(一)——F#尝鲜 MVC专题研究(五)——数据验证 MVC专题研究(四)——Html中的扩展方法 MVC专题研究(三)——数据绑定和传送 MVC专题研究(二)——神奇的URL MVC2专题研究(一)——用MVC组织管理您的家庭收入 典型算法及应用——“递归法”探究 ASP.NET专题研究——资源文件的使用 NET基本探究系列——委托 NET常见类系列探究——序列化和反序列化的应用
JQuery学习笔记——nt-child的使用 - maledong - 博客园
maledong · 2011-01-17 · via 博客园 - maledong

在使用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>。从而可以设置样式了。