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树插件zTree使用方法详解
May 02 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
360提示[高危]使用存在漏洞的JQuery版本的解决方法
Oct 27 jQuery
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 jQuery
JS文件中加载jquery.js的实例代码
May 05 jQuery
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
Jquery实现无缝向上循环滚动列表的特效
Feb 13 jQuery
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
jQuery实现简易聊天框
Feb 08 jQuery
jquery实现上传图片功能
Jun 29 jQuery
jquery轮播图插件使用方法详解
Jul 31 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-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
查找iframe里元素的方法可传参
2013/09/11 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
在node中如何使用 ES6
2017/04/22 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python实现的桶排序算法示例
2017/11/29 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Python: glob匹配文件的操作
2020/12/11 Python
python绘制汉诺塔
2021/03/01 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
J2EE面试题大全
2016/08/06 面试题
业务经理岗位职责
2013/11/11 职场文书
入学生会自荐书范文
2014/02/05 职场文书
影视广告专业求职信
2014/09/02 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
新员工入职感想
2015/08/07 职场文书
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript