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监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
jQuery实现div跟随鼠标移动
Aug 20 jQuery
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
jQuery UI实现动画效果代码分享
Aug 19 jQuery
jQuery zTree树插件的使用教程
Aug 16 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
jquery实现直播视频弹幕效果
Feb 25 jQuery
jquery css实现流程进度条
Mar 26 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 异常处理实现代码
2009/03/10 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
JS实现li标签的删除
2019/04/12 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
医药类个人求职的自我评价
2014/02/12 职场文书
怎样写离婚协议书
2014/09/10 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
法务专员岗位职责
2015/02/14 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python