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插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
jQuery自定义多选下拉框效果
Jun 19 jQuery
jQuery plugin animsition使用小结
Sep 14 jQuery
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
jQuery实现表格隔行换色
Sep 01 jQuery
jquery使用FormData实现异步上传文件
Oct 25 jQuery
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
jQuery实现可以扩展的日历
Dec 01 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/08/18 PHP
PHP MSSQL 存储过程的方法
2008/12/24 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
读jQuery之二(两种扩展)
2011/06/11 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
js document.write()使用介绍
2014/02/21 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
Vue3.0数据响应式原理详解
2019/10/09 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python笔记之工厂模式
2019/11/20 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
数据库方面面试题
2012/04/22 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
实习生自我鉴定
2013/12/12 职场文书
授权委托书格式范文
2014/08/02 职场文书
大学生交通专业求职信
2014/09/01 职场文书
药店采购员岗位职责
2014/09/30 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
李强优秀员工观后感
2015/06/16 职场文书
运动会报道稿大全
2015/07/23 职场文书
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL