jQuery选择器_动力节点Java学院整理


Posted in jQuery onJuly 05, 2017

选择器是jQuery的核心。一个选择器写出来类似$('#dom-id')

为什么jQuery要发明选择器?回顾一下DOM操作中我们经常使用的代码:

// 按ID查找:
var a = document.getElementById('dom-id');
// 按tag查找:
var divs = document.getElementsByTagNames('div');
// 查找<p class="red">:
var ps = document.getElementsByTagNames('p');
// 过滤出class="red":
// TODO:
// 查找<table class="green">里面的所有<tr>:
var table = ...
for (var i=0; i<table.children; i++) {
  // TODO: 过滤出<tr>
}

这些代码实在太繁琐了,并且,在层级关系中,例如,查找<table class="green">里面的所有<tr>,一层循环实际上是错的,因为<table>的标准写法是:

<table>
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
</table>

很多时候,需要递归查找所有子节点。

jQuery的选择器就是帮助我们快速定位到一个或多个DOM节点。

按ID查找

如果某个DOM节点有id属性,利用jQuery查找如下:

// 查找<div id="abc">:
var div = $('#abc');

注意,#abc以#开头。返回的对象是jQuery对象。

什么是jQuery对象?jQuery对象类似数组,它的每个元素都是一个引用了DOM节点的对象。

以上面的查找为例,如果id为abc的<div>存在,返回的jQuery对象如下:

[<div id="abc">...</div>]

如果id为abc的<div>不存在,返回的jQuery对象如下:

[]

总之jQuery的选择器不会返回undefined或者null,这样的好处是你不必在下一行判断if (div === undefined)。

jQuery对象和DOM对象之间可以互相转化:

var div = $('#abc'); // jQuery对象
var divDom = div.get(0); // 假设存在div,获取第1个DOM元素
var another = $(divDom); // 重新把DOM包装为jQuery对象

通常情况下你不需要获取DOM对象,直接使用jQuery对象更加方便。如果你拿到了一个DOM对象,那可以简单地调用$(aDomObject)把它变成jQuery对象,这样就可以方便地使用jQuery的API了。

按tag查找

按tag查找只需要写上tag名称就可以了:

var ps = $('p'); // 返回所有<p>节点
ps.length; // 数一数页面有多少个<p>节点

按class查找

按class查找注意在class名称前加一个.:

var a = $('.red'); // 所有节点包含`class="red"`都将返回
// 例如:
// <div class="red">...</div>
// <p class="green red">...</p>

通常很多节点有多个class,我们可以查找同时包含red和green的节点:

var a = $('.red.green'); // 注意没有空格!
// 符合条件的节点:
// <div class="red green">...</div>
// <div class="blue green red">...</div>

按属性查找

一个DOM节点除了id和class外还可以有很多属性,很多时候按属性查找会非常方便,比如在一个表单中按属性来查找:

var email = $('[name=email]'); // 找出<??? name="email">
var passwordInput = $('[type=password]'); // 找出<??? type="password">
var a = $('[items="A B"]'); // 找出<??? items="A B">

当属性的值包含空格等特殊字符时,需要用双引号括起来。

按属性查找还可以使用前缀查找或者后缀查找:

var icons = $('[name^=icon]'); // 找出所有name属性值以icon开头的DOM
// 例如: name="icon-1", name="icon-2"
var names = $('[name$=with]'); // 找出所有name属性值以with结尾的DOM
// 例如: name="startswith", name="endswith"
这个方法尤其适合通过class属性查找,且不受class包含多个名称的影响:
var icons = $('[class^="icon-"]'); // 找出所有class包含至少一个以`icon-`开头的DOM
// 例如: class="icon-clock", class="abc icon-home"

组合查找

组合查找就是把上述简单选择器组合起来使用。如果我们查找$('[name=email]'),很可能把表单外的<div name="email">也找出来,但我们只希望查找<input>,就可以这么写:

var emailInput = $('input[name=email]'); // 不会找出<div name="email">

同样的,根据tag和class来组合查找也很常见:

var tr = $('tr.red'); // 找出<tr class="red ...">...</tr>

多项选择器

多项选择器就是把多个选择器用,组合起来一块选:

$('p,div'); // 把<p>和<div>都选出来
$('p.red,p.green'); // 把<p class="red">和<p class="green">都选出来

要注意的是,选出来的元素是按照它们在HTML中出现的顺序排列的,而且不会有重复元素。例如,<p class="red green">不会被上面的$('p.red,p.green')选择两次。

jQuery 相关文章推荐
jQuery中map函数的两种方式
Apr 07 jQuery
js和jquery中获取非行间样式
May 05 jQuery
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
jquery实现下拉菜单的手风琴效果
Jul 23 jQuery
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
jquery使用FormData实现异步上传文件
Oct 25 jQuery
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
jquery插件实现图片悬浮
Apr 16 jQuery
jQuery事件_动力节点Java学院整理
Jul 05 #jQuery
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 #jQuery
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 #jQuery
jquery拖动改变div大小
Jul 04 #jQuery
jQuery实现动态给table赋值的方法示例
Jul 04 #jQuery
jQuery操作DOM_动力节点Java学院整理
Jul 04 #jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 #jQuery
You might like
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Prototype Number对象 学习
2009/07/19 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python二元表达式用法
2019/12/04 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
机电专业毕业生推荐信
2013/11/10 职场文书
三年级科学教学反思
2014/01/29 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
商务宴会祝酒词
2015/08/11 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python