jQuery选择器对应的DOM API ——选择元素
英文原文:http://blog.garstasio.com/you-dont-need-jquery/selectors/愚人码头注:
- 原作者的写这文章的意图是让我们抛弃jQuery,You Don’t Need jQuery!提倡我们使用原生的JavaScript,所以收集整理了jQuery语法对应的DOM API ;
- 原作者参数的原因可以看这里:http://blog.garstasio.com/you-dont-need-jquery/why-not/ ,个人同意他的观点,简单的页面或应用,完全可以抛弃jQuery;但是出于开发效率和开发成本的考虑,我还是比较喜欢用jQuery。
- 本人翻译或者说拷贝这篇文章的原因是:有一部分前端只会用jQuery,什么都网上找插件,甚至滥用jQuery,一点原生的JavaScript都不会写。QQ上,微博私信经常收到类似的基础问题。前端就是折腾的活,要从基础系统的学习。所以翻译了这篇文章,希望对新手和不写原生脚本的同学有一点点的帮助。
选择元素
有多少次你看到一个Web应用程序或库使用jQuery执行简单琐碎的元素选择?有多少次你这样写:$(#myElement')
? 或者这样$('.myElement')
?嘘……你不需要用jQuery选择元素!这使用DOM API也很容易做到。
- IDs
- CSS Classes
- Tag Names
- Attributes
- Pseudo-classes
- Children
- Descendants
- Exclusion Selectors
- Multiple Selectors
- See a Pattern?
- Filling in the Gaps
- Next in this Series
By ID
jQuery
- // returns a jQuery obj w/ 0-1 elements
- $('#myElement');
DOM API
- // IE 5.5+
- document.getElementById('myElement');
…或者…
- // IE 8+
- document.querySelector('#myElement');
这两种方法返回一个Element
(元素)。 需要注意的是使用 getElementById
比使用querySelector
更高效。
请问jQuery的语法提供任何好处吗?我没有看到一个。你呢?
By CSS Class
jQuery
- // returns a jQuery obj w/ all matching elements
- $('.myElement');
DOM API
- // IE 9+
- document.getElementsByClassName('myElement');
…或者…
- // IE 8+
- document.querySelectorAll('.myElement');
第一个方法返回的HTMLCollection
,并且效率最高的是第二个方法。 querySelectorAll
总是返回一个NodeList
(节点列表)。
同样,这里真的很简单的东西。为什么要使用jQuery?
By Tag Name
举个例子,选择页面上所有的<div>
元素:
jQuery
- $('div');
DOM API
- // IE 5.5+
- document.getElementsByTagName('div');
…或者…
- // IE 8+
- document.querySelectorAll('div');
正如预期的那样,querySelectorAll
(返回 NodeList
)比getElementsByTagName
(返回HTMLCollection
)效率低。
By Attribute(属性)
选择所有”data-foo-bar”值为”someval”的元素:
jQuery
- $('[data-foo-bar="someval"]');
DOM API
- // IE 8+
- document.querySelectorAll('[data-foo-bar="someval"]');
DOM API和jQuery语法非常相似。
By Pseudo-class(伪类)
选择所有在指定表单中的当前无效(:invalid 伪类)字段。假设我们的表单 ID为”myForm”。
jQuery
- $('#myForm :invalid');
DOM API
- // IE 8+
- document.querySelectorAll('#myForm :invalid');
Children(子元素)
选择一个特定元素的所有子元素。 假设我们的特定元素 ID为 “myParent”。
jQuery
- $('#myParent').children();
DOM API
- // IE 5.5+
- // NOTE: This will include comment and text nodes as well.
- document.getElementById('myParent').childNodes;
…或者…
- // IE 9+ (ignores comment & text nodes).
- document.getElementById('myParent').children;
但是,如果我们只想找到特定的子元素呢?比如,有 “ng-click”属性的子元素?
jQuery
- $('#myParent').children('[ng-click]');
…或…
- $('#myParent > [ng-click]');
DOM API
- // IE 8+
- document.querySelector('#myParent > [ng-click]');
Descendants(后代元素)
找到#myParent下面所有”a”元素。
jQuery
- $('#myParent A');
DOM API
- // IE 8+
- document.querySelectorAll('#myParent A');
Excluding Elements(排除元素)
选择所有<div>
元素,排除那些有”ignore”样式类 <div>
元素。
jQuery
- $('DIV').not('.ignore');
…或者…
- $('DIV:not(.ignore)');
DOM API
- // IE 9+
- document.querySelectorAll('DIV:not(.ignore)');
Multiple Selectors(多重选择)
选择所有<div>
,<a>
和<script>
元素。
jQuery
- $('DIV, A, SCRIPT');
DOM API
- // IE 8+
- document.querySelectorAll('DIV, A, SCRIPT');
See a Pattern?
如果我们专注于选择器的支持,并且不需要处理IE8以下的浏览器,我们只需用这个替代jQuery:
- window.$ = function(selector) {
- var selectorType = 'querySelectorAll';
- if (selector.indexOf('#') === 0) {
- selectorType = 'getElementById';
- selector = selector.substr(1, selector.length);
- }
- return document[selectorType](selector);
- };
But I Want More!
对于绝大多数项目中,选择器支持到Web API就足够了。但是,如果你不幸需要支持IE7?在这种情况下,你可能需要一些第三方的代码来提供一些帮助。
当然,你仅仅需要引入jQuery,但当你只需要支持现在先进的选择器时,为什么用这么大的代码库呢?相反,尝试一下micro-library(微小的库)完全专注于元素选择。考虑,Sizzle,这恰好是jQuery使用的选择库。Selectivizr是另一种非常小的选择库,在很老的浏览器上也能支持CSS3选择器。
jQuery选择器对应的DOM API ——选择元素的更多相关文章
- jQuery 第二章 实例方法 DOM操作选择元素相关方法
进一步选择元素相关方法: .get() .eq() .find() .filter() .not() .is() .has() .add()集中操作 .end()回退操作 .get() $(&qu ...
- 深入学习jQuery选择器系列第二篇——过滤选择器之子元素选择器
× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 在上一篇中已经介绍过基础选择器和层级选择器,本文开始介绍过滤选择器.过滤选择器是jQuery选择器中最为庞大也是最为 ...
- Appium之UIAutomator API选择元素
UI Automator测试框架提供了一组API来构建UI测试. 利用UI Automator API可以执行在测试设备中,打开‘设置’菜单或应用启动器等操作. UI Automator测试框架非常适 ...
- Jquery选择器,操作DOM
刚接触jQuery,她真的是个好东西,操作DOM,修改样式,都很方便,主要获取DOM树的类和子代很方便. 今天用jq做了tab面包屑,不过用的是别人的代码,自己修改的,不错也做出来了,原理也有些明白, ...
- 抛弃jQuery:DOM API之选择元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...
- 抛弃jQuery:DOM API之操作元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...
- JQuery基础教程:选择元素(上)
jQuery最强大的特性之一就是它能够简化在DOM中选择元素的任务,DOM中的对象网络与家谱有几分类似,当我们提到网络中元素之间的关系时,会使用类似描述家庭关系的术语,比如父元素.子元素,等等.通过一 ...
- Jquery 系列(2) 选择元素
Jquery基础学习 jQuery利用css选择符的能力,能够在DOM中快捷而轻松地获取元素. 主要内容如下: 介绍DOM树 如何通过CSS选择符在页中查找元素 扩展jQuery标准的CSS选择符 选 ...
- jQuery——选择元素
###理解DOM jQuery最强大的特性之一就是能够简化在DOM中选择元素的任务.**DOM(文档对象模型)**充当了JavaScript与网页之间的接口,它以对象网络而非纯文本的形式来表现HTML ...
随机推荐
- (@WhiteTaken)设计模式学习——单例模式
单例模式,个人理解就是,使用了这个模式,可以保证一个类只生成唯一的实例对象.就是在整个程序中,这个类只存在一个实例对象. GoF对单例模式的定义:保证一个类,只有一个实例存在,同时提供能对该实例加以访 ...
- 【LeetCode题解】链表Linked List
1. 链表 数组是一种顺序表,index与value之间是一种顺序映射,以\(O(1)\)的复杂度访问数据元素.但是,若要在表的中间部分插入(或删除)某一个元素时,需要将后续的数据元素进行移动,复杂度 ...
- 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器
九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数 ...
- python解释器的安装;python2与python3同时在环境变量中时的解决方案
新文档 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addres ...
- 搭建Eclipse开发和调试环境(真机)
由于工作原因,最近开始了Android开发.之前接触过一段时间Android,还是在2.x时代. 那个时候搭建开发环境还是挺麻烦的.又是Eclipse,又是ADT的,不同的版本还要安装对应开发包.现在 ...
- javascript之自增自减典型运算(易错)
JavaScript“自增”运算符与表达式 递增运算符(++)是一个一元运算符,该运算符可以将操作数进行递增操作,即每次增加1.递增运算符要求其操作数必须是变量.对象中的某个属性或数组中的某个元素,并 ...
- LAMP学习小记
记录今天学习到的解决LAMP环境搭建的两个小问题: 问题1.xshell无法连接到虚拟机上的linux主机 解决方法: (1)进入网络配置文件: vi /etc/sysconfig/network-s ...
- Java包装类缓存
1.基本概念 在jdk1.5及之后的版本中,Java在5大包装类中(Byte,Charactor,Short,Integer,Long)增加了相应的私有静态成员内部类为相应包装类对象提供缓存机制,In ...
- Tomcat8 + Redis实现session集中管理
环境准备: 部署两台 tomcat 8.0 安装 redis 服务器 下载工具库( commons-pool2-2.3.jar.jedis-2.7.2.jar .改良版的 tomcat ...
- jprofiler安装图解 ( 7_1 )
环境: 1.sun jdk1.6.0 2.jprofiler_windows_6_0_2.exe 安装 1. jdk, 安装略... 2. jprofiler安装 一路next 到Enter lice ...