Jquery:小知识;

jQuery学习笔记(二):this相关问题及选择器

 

上一节的遗留问题,关于this的相关问题,先来解决一下。

this的相关问题

this指代的是什么

这个应该是比较好理解的,this就是指代当前操作的DOM对象。

在jQuery中,this可以用于单个对象,也可以用于多个对象。

  1. $('btn').click(function(){
  2. alert(this.innerHTML); // 单个对象,this指代当前id为btn的DOM对象
  3. });
  4.  
  5. $('div').each(function(index){
  6. alert(this.innerHTML); // 多个对象,this指代当前循环中索引为index的DOM对象
  7. });

jQuery中的this和$(this)有什么区别

jQuery中的this和$(this)有什么区别

  1. $("div").each(function(index){
  2. alert($(this)); // [object Object] jQuery对象
  3. alert(this); // [object HTMLDivElement] DOM对象
  4. });

可以观察到,this指代的是DOM对象,$(this)指代的是包装当前DOM对象的jQuery对象。

jQuery选择器

上一节也分析到,jQuery的最大贡献之一就是方便的获取DOM元素,并对DOM元素进行操作。

先看几个简单的例子:

  1. $('div'); // 选择所有标签为div的DOM元素
  2.  
  3. $('#info'); // 选择id为info的DOM元素
  4.  
  5. $('div>p'); // 选择所有div标签下的子集标签为p的DOM元素
  6.  
  7. $('input[placeholder*="info"]'); // 获取所有input标签中,属性placeholder值中包含info字段的DOM元素
  8.  
  9. $('p:odd'); // 获取所有标签为p的元素压入栈中,选择其中索引值为奇数的DOM元素

可以看到,有多种选择方式让你获取你所需要的对象,这些先作为一个引子,让我们对jQuery的选择器有一个大致上的印象。现在以开发者的角度来思考:如何选择需要的DOM元素。

1. 首先能想到的是,获取指定id的元素,对其进行操作。

  1. $('#info'); // 获取id为info的元素

2. 既然可以获取指定id的元素,那么理所应当的,也可以获取指定class的元素。

  1. $('.info'); // 获取class为info的元素

3. 有时会遇到一系列具有相同className的元素,而这些元素之间没有办法互相区分彼此。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Test</title>
  5. </head>
  6. <body>
  7.   <div class='info'>0</div>
  8.   <div class='info'>1</div>
  9.   <div class='info'>2</div>
  10.   <div class='info'>3</div>
  11.   <div class='info'>4</div>
  12. </body>
  13. </html>

这时,如果我想获取这一系列元素中的第一个:

  1. $('.info:first').val(); // 获取class为info的一系列元素中的第一个元素的值,即0

我想获取这一系列元素中的最后一个:

  1. $('.info:last').val(); // 获取class为info的一系列元素中的最后一个元素的值,即4

那获取任意一个元素呢?

  1. $('.info:eq(2)').val(); // 获取class为info的一系列元素中索引为2的元素的值,即2(索引从0开始)

看来选择单个元素还是很方便的,那要是选择符合某些条件的复数个元素呢?比如选择这一组元素的后三个元素:

  1. $('.info:gt(1)'); // 获取class为info的一系列元素中索引大于1的对象,即2,3,4
  2. $('.info:lt(2)'); // 获取class为info的一系列元素中索引小于2的对象,即0,1

选择系列元素中索引为奇数的元素(好像很少这么做,但jQuery也为我们提供了选择器)

  1. $('.info:odd'); // 获取class为info的一系列元素中索引为奇数(1,3)的对象,即1,3 $('.info:even'); // 获取class为info的一系列元素中索引为偶数(0,2,4)的对象,即0、2、4

4. 比如现在有一系列链接元素,但是它们并没有唯一id标识,也没有className区分,各个元素之间仅有href是不一致的,该如何选择需要的元素呢?

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Test</title>
  5. </head>
  6. <body>
  7. <div>
  8.   <a>0</a>
  9.   <a href='/info'>1</a>
  10.   <a href='/infomation'>2</a>
  11.   <a href='/test'>3</a>
  12. </div>
  13. </body>
  14. </html>

比如我想选择带有href属性的a标签元素:

  1. $('a[href]'); // 选择带有href属性的a标签,即1,2,3

选择href属性值为info的a标签元素:

  1. $('a[href="info"]'); // 选择href属性为info的a标签,即1

选择href属相值已info开头的a标签元素:

  1. $('a[href^="info"]'); // 选择带有href属性值已info开头的a标签,即1,2

选择href属性值已tion结尾的a标签元素:

  1. $('a[href$="tion"]'); // 选择带有href属性值已tion结尾的a标签,即2

选择href属性值中有fo字段的a标签元素:

  1. $('a[href*="fo"]'); // 选择带有href属性值中包含fo的a标签,即1,2

当然,也可以进行反选,选择href属性值中不包含info的a标签元素:

  1. $('a[href!="info"]'); // 选择带有href属性值中不包含info的a标签,即3

5. 还有会遇到一些情况,要求我们根据DOM元素的内容来选择合适的元素。

  1. $('div:contains("info")'); // 选择div标签中内容包含info字段的元素

6. 现在我们已经通过指定id、class或是指定索引值、属性值来确定元素,让我们换个角度,有没有可能从元素之间的关系来确定元素呢?

先统一名称:

同级元素:即当前元素处于同一层级。

  1. <div>
  2. <p>0</p> // 当前两个标签为p的元素处于同一层级,属于同级元素
  3. <p>1</p>
  4. </div>

父级元素:即当前元素的直属上层元素。

祖先元素:即当前元素的所有上层元素。

子级元素:即当前元素的直属子层元素。

后代元素:即当前元素的所有子层元素。

  1. <div id='ancestor'>
  2. <div id='father'> // 标签为p的元素的父级元素是id为father的元素,祖先元素为id为father和ancestor的元素
  3. <p><span>0</span></p> // id为father的元素的子级元素是标签为p的元素,后代元素为标签p与span的元素
  4. <p>1</p>
  5. </div>
  6. </div>

统一好关系名称之后,再探讨元素之间的关系就不会感觉混乱。

现在有如下代码:

  1. <form>
  2. <label>Name:</label>
  3. <input name="name" />
  4. <fieldset>
  5. <label>Newsletter:</label>
  6. <input name="firstletter" />      <input name="secondletter" /> </fieldset>
  7. <input name="none" />
  8. </form>

选择标签为form的所有子级input元素:

  1. $('form>input'); // 选择标签为from的元素下的所有标签为input的子级元素,即name=“name”,name=“none”的元素

选择标签为form的所有的后代input元素:

  1. $('form input'); // 选择标签为from的元素下的所有标签为input的后代元素,即name=“name”,name=“none”,name=“firstletter”,name=“secondletter”的元素

也可以选择符合条件的同级元素(同级元素中的第一个):

  1. $('label+input'); // 选择标签为label的同级元素中,标签为input的元素中的第一个,即name=“name”,name=“firstletter”的元素

也可以选择所有符合条件的同级元素:

  1. $('label~input'); // 选择标签为label的同级元素中,所有标签为input的元素,即name=“name”,name=“firstletter”,name=“secondletter”,name=“none”的元素

选择后代元素中包含选定元素的元素:

  1. <div>
  2. <p><span>Hello</span></p>
  3. </div>
  4. <div>Hello again!</div>
  1. $('div:has(span)') // 选择所有后代元素中包含span元素的div元素
  2.  
  3. ---------------->此文转发!

Jquery:小知识;的更多相关文章

  1. JQuery小知识

    一.禁用鼠标右键 $(document).ready(function() { $(document).bind("contextmenu", function(e) { retu ...

  2. JS,JQuery小知识

    http://blog.163.com/wumingli456@126/blog/static/28896414201112252456459/?suggestedreading&wumii

  3. jquery 小知识

    $("p:eq(0)") :表p标签的第一个元素 $("p:eq(1)") :表p标签的第二个元素

  4. s性能优化方面的小知识

    总结的js性能优化方面的小知识 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够 ...

  5. JQuery基础知识(1)

    JQuery基础知识(1) 对JQuery学习中遇到的小细节进行了整理和总结 1.JQuery hide()和show()方法,分别对选中的元素进行隐藏和显示,语法:hide()和show分别有对应的 ...

  6. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  7. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  8. 10个jQuery小技巧

    收集的10个 jQuery 小技巧/代码片段,可以帮你快速开发. 1.返回顶部按钮 你可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件. $('a.top' ...

  9. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

随机推荐

  1. MyEclipse 2015免费在线公开课,2月5日开讲

    MyEclipse 2015免费在线公开课,2月5日开讲,由MyEclipse官方高级PM Brian Fernandes 主讲. 主讲内容: 更好地支持javascript和技术模块 全新的REST ...

  2. pgRouting 2.0 for windows 来了

    Postgres 9.2, PostGIS 2.0 and pgRouting 2.0  支持32.64 下载地址: http://winnie.postgis.net/download/window ...

  3. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  4. RxJava 和 RxAndroid 五(线程调度)

    对rxJava不了解的同学可以先看 RxJava 和 RxAndroid 一 (基础)RxJava 和 RxAndroid 二(操作符的使用)RxJava 和 RxAndroid 三(生命周期控制和内 ...

  5. Android studio打开项目时出现 gradle download 无反应

    在使用android studio 新建 项目的时候,会发现一直无法下载 gradle程序一直卡住不动,原因是被墙了. 解决方法: 到gradle官网下载离线包,解压后将bin路径加入Path环境变量 ...

  6. iOS开发--Swift 基于AFNetworking 3.0的网络请求封装

    Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...

  7. 转:JQuery.Ajax之错误调试帮助信息

    今天发现一篇讲Ajax比较好的文章,汇总下,作为自己的知识储备. 下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. typ ...

  8. Windows操作系统优化(Windows优化大师版) - 进阶者系列 - 学习者系列文章

    Windows优化大师是一款不错的优化软件.笔者以前在使用XP的时候就使用该软件进行优化.下面就简要的介绍该软件优化的过程. 1.  下载该软件. http://dl.youhua.com/youhu ...

  9. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作

    2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...

  10. 使用JUnit4测试Spring

    测试DAO import static org.junit.Assert.*; import org.junit.Before; import org.junit.Ignore; import org ...