在JQ中关于this
this的相关问题
this指代的是什么
这个应该是比较好理解的,this就是指代当前操作的DOM对象。
在jQuery中,this可以用于单个对象,也可以用于多个对象。

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

jQuery中的this和$(this)有什么区别
jQuery中的this和$(this)有什么区别
$("div").each(function(index){
alert($(this)); // [object Object] jQuery对象
alert(this); // [object HTMLDivElement] DOM对象
});
可以观察到,this指代的是DOM对象,$(this)指代的是包装当前DOM对象的jQuery对象。
jQuery选择器
上一节也分析到,jQuery的最大贡献之一就是方便的获取DOM元素,并对DOM元素进行操作。
先看几个简单的例子:

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

可以看到,有多种选择方式让你获取你所需要的对象,这些先作为一个引子,让我们对jQuery的选择器有一个大致上的印象。现在以开发者的角度来思考:如何选择需要的DOM元素。
1. 首先能想到的是,获取指定id的元素,对其进行操作。
$('#info'); // 获取id为info的元素
2. 既然可以获取指定id的元素,那么理所应当的,也可以获取指定class的元素。
$('.info'); // 获取class为info的元素
3. 有时会遇到一系列具有相同className的元素,而这些元素之间没有办法互相区分彼此。

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div class='info'>0</div>
<div class='info'>1</div>
<div class='info'>2</div>
<div class='info'>3</div>
<div class='info'>4</div>
</body>
</html>

这时,如果我想获取这一系列元素中的第一个:
$('.info:first').val(); // 获取class为info的一系列元素中的第一个元素的值,即0
我想获取这一系列元素中的最后一个:
$('.info:last').val(); // 获取class为info的一系列元素中的最后一个元素的值,即4
那获取任意一个元素呢?
$('.info:eq(2)').val(); // 获取class为info的一系列元素中索引为2的元素的值,即2(索引从0开始)
看来选择单个元素还是很方便的,那要是选择符合某些条件的复数个元素呢?比如选择这一组元素的后三个元素:
$('.info:gt(1)'); // 获取class为info的一系列元素中索引大于1的对象,即2,3,4
$('.info:lt(2)'); // 获取class为info的一系列元素中索引小于2的对象,即0,1
选择系列元素中索引为奇数的元素(好像很少这么做,但jQuery也为我们提供了选择器)
$('.info:odd'); // 获取class为info的一系列元素中索引为奇数(1,3)的对象,即1,3
$('.info:even'); // 获取class为info的一系列元素中索引为偶数(0,2,4)的对象,即0、2、4
4. 比如现在有一系列链接元素,但是它们并没有唯一id标识,也没有className区分,各个元素之间仅有href是不一致的,该如何选择需要的元素呢?

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div>
<a>0</a>
<a href='/info'>1</a>
<a href='/infomation'>2</a>
<a href='/test'>3</a>
</div>
</body>
</html>

比如我想选择带有href属性的a标签元素:
$('a[href]'); // 选择带有href属性的a标签,即1,2,3
选择href属性值为info的a标签元素:
$('a[href="info"]'); // 选择href属性为info的a标签,即1
选择href属相值已info开头的a标签元素:
$('a[href^="info"]'); // 选择带有href属性值已info开头的a标签,即1,2
选择href属性值已tion结尾的a标签元素:
$('a[href$="tion"]'); // 选择带有href属性值已tion结尾的a标签,即2
选择href属性值中有fo字段的a标签元素:
$('a[href*="fo"]'); // 选择带有href属性值中包含fo的a标签,即1,2
当然,也可以进行反选,选择href属性值中不包含info的a标签元素:
$('a[href!="info"]'); // 选择带有href属性值中不包含info的a标签,即3
5. 还有会遇到一些情况,要求我们根据DOM元素的内容来选择合适的元素。
$('div:contains("info")'); // 选择div标签中内容包含info字段的元素
6. 现在我们已经通过指定id、class或是指定索引值、属性值来确定元素,让我们换个角度,有没有可能从元素之间的关系来确定元素呢?
先统一名称:
同级元素:即当前元素处于同一层级。
<div>
<p>0</p> // 当前两个标签为p的元素处于同一层级,属于同级元素
<p>1</p>
</div>
父级元素:即当前元素的直属上层元素。
祖先元素:即当前元素的所有上层元素。
子级元素:即当前元素的直属子层元素。
后代元素:即当前元素的所有子层元素。

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

统一好关系名称之后,再探讨元素之间的关系就不会感觉混乱。
现在有如下代码:

<form>
<label>Name:</label>
<input name="name" />
<fieldset>
<label>Newsletter:</label>
<input name="firstletter" />
<input name="secondletter" />
</fieldset>
<input name="none" />
</form>

选择标签为form的所有子级input元素:
$('form>input'); // 选择标签为from的元素下的所有标签为input的子级元素,即name=“name”,name=“none”的元素
选择标签为form的所有的后代input元素:
$('form input'); // 选择标签为from的元素下的所有标签为input的后代元素,即name=“name”,name=“none”,name=“firstletter”,name=“secondletter”的元素
也可以选择符合条件的同级元素(同级元素中的第一个):
$('label+input'); // 选择标签为label的同级元素中,标签为input的元素中的第一个,即name=“name”,name=“firstletter”的元素
也可以选择所有符合条件的同级元素:
$('label~input'); // 选择标签为label的同级元素中,所有标签为input的元素,即name=“name”,name=“firstletter”,name=“secondletter”,name=“none”的元素
选择后代元素中包含选定元素的元素:
<div>
<p><span>Hello</span></p>
</div>
<div>Hello again!</div>
$('div:has(span)') // 选择所有后代元素中包含span元素的div元素
转自互联网
在JQ中关于this的更多相关文章
- jq中数组应用的错误
js中数组可以这样使用: <ul id="ul"> <li value="1">s</li> <li>f< ...
- JQ中mouseover和mouseenter的区别
我最近也在学习JQuery,所以最近对JQ中的一些小问题进行总结,方便学习. 在对于刚开始学习JQ的初学者来说,mouseover事件和mouseenter事件总是傻傻分不清楚,毕竟刚开始学习的时候, ...
- JS模式:jq中简单的模式--》采摘自js设计(tomxu_version)
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- JQ中的clone()方法与DOM中的cloneNode()方法
JQ中的clone()方法与DOM中的cloneNode()方法 cloneNode()定义和用法 cloneNode()方法创建节点的拷贝,并返回该副本. 语法: node.cloneNode(de ...
- jq中的ajax
jq对ajax进行了封装,在jq中$.ajax()方法是最底层的方法,第二层是load() , get() , post()方法,第三层是$.getScript()和$.getJSON().基本第二种 ...
- jq中的$操作符与其他js框架冲突
解决办法: jq中存在方法:noConflict() 可返回对 jQuery 的引用. 使用示例: var jq = $.noConflict(); jq(document).ready(functi ...
- jq中的isArray方法分析,如何判断对象是否是数组
<!DOCTYPE html> <html> <head> <title>jq中的isArray方法分析</title> <meta ...
- JQ中$(window).load和$(document).ready区别与执行顺序
JQ中的$(document).ready()大家应该用的非常多,等同于$(function(){}),基本每个JS脚本中都有这个函数的出现有时甚至会出现多个,那么另一个加载函数$(window).l ...
- [转]JQ中$(window).load和$(document).ready区别与执行顺序
一.$(window).load().window.onload=function(){}和$(document).ready()方法的区别 1.$(window).load() 和window.on ...
- jq中append()、prepend()、after()、before()的区别
jq中append().prepend().after().before()的区别详解 .append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标 ...
随机推荐
- 深入理解Javascript--闭包
原网站http://www.cnblogs.com/xiaoloulan/p/5980569.html 在了解闭包之前需要了解下作用域的工作原理作为基础,传送门. 闭包是一个老生常谈的问题,在面试中也 ...
- Makefile笔记之一 ------ 变量的引用及赋值
1.变量的引用方式: "$(变量名)"或者"¥{变量名}" 例如: ${Objs}就是取变量Objs的值 注意: 当变量名为单字符是可以采用:"$a& ...
- 丢掉慢吞吞的AVD吧,android模拟神器:Genymotion
安装图文介绍: http://padhz.com/how-to-run-android-simulator-on-pc.html; 刚好手头上有visual box,亲自试用了一下.新建了一个Gala ...
- 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)
题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...
- 2016-1-30 Servlet中Session管理(Sesssion追踪)
Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...
- SpringMvc的简单介绍
1.mcv框架要做哪些事情 (a)将url映射到java类或者Java类的方法 (b)封装用户提交的数据 (c)处理请求---调用相关的业务处理,封装响应的数据 (d)将封装的数据进行渲染,jsp,h ...
- [ACM训练] 算法初级 之 搜索算法 之 深度优先算法DFS (POJ 2251+2488+3083+3009+1321)
对于深度优先算法,第一个直观的想法是只要是要求输出最短情况的详细步骤的题目基本上都要使用深度优先来解决.比较常见的题目类型比如寻路等,可以结合相关的经典算法进行分析. 常用步骤: 第一道题目:Dung ...
- 【第三课】WEBIX 入门自学-Hello World
在看官网教程时,入门的例子就是dataTable这个空间.So,遵循官网,一起来看一下入门的DataTable组件: WEB使用时固然是先引入相应的库文件: 代码如下 <html> < ...
- 本周PSP流程进度
一计划 (1)估计这个任务需要多少时间:8天 二开发 (1)需求分析:作为一名观众,我希望了解每一场的比赛成绩,以便加深对自己喜爱球队的了解,以及赛况. (2)生成设计文档: (3)设计复审(和同学交 ...
- 第一天---HTML基础学习
HTML(hyper text markup language) HTML不是一种编程语言,而是一种标记语言(markup language),标记语言是一套markup tag(标记标签),HTML ...