HTML5中类jQuery选择器querySelector的高级使用

基本用法

querySelector

该方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素。 ----> querySelector得到一个DOM

var element = document.querySelector(‘#container‘);//返回id为container的dom
var element = document.querySelector(‘div#container‘);//返回id为container的首个div
var element = document.querySelector(‘.foo,.bar‘);//返回带有foo或者bar样式类的首个元素

querySelectorAll

该方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。    ----> querySelectorAll 得到一个伪数组 DOM

var elements = document.querySelectorAll(‘div.foo‘);//返回所有带foo类样式的d<div id="box">   //surface blog

querySelectorAll支持属性操作 这个用也比较多

<div id="box" >
      <ul>
        <li   data-href=‘http://www.qq.com‘>tagname 111</li>
        <li class="surfaces">这是clase  222</li>
        <li class="surfaces">这是class 333</li>
        <li class="surfaces"  data-href=‘http://www.baidu.com‘>这是class 444</li>
     </ul>

</div>
document.getElementById("box").addEventListener("click",function(){
	var  attr=document.querySelectorAll(‘[data-href]‘);
		 console.log(attr);
},!1);

  

 

移动端dom操作 ,其实只要 getElementById(id),   querySelector 和querySelectorAll 已经能够满足大部分的需求了;

高级用法

先附上相关 html                 http://www.cnblogs.com/surfaces/

<div id="box">
      <ul>
        <li >tagname 111</li>
        <li class="surfaces">这是clase  222</li>
        <li class="surfaces">这是class 333</li>
        <li class="surfaces">这是class 444</li>
     </ul>

</div>

  

先看看 querySelector的高级应用

var query = document.querySelector.bind(document);   //单个的

var query_id=query(‘#box‘);    //dom id
var query_class=query(‘.surfaces‘);   // dom class
var query_tagname=query(‘li‘)    //dom 标签

获取看到这里,你会怀疑 这都可以,我们跑一下代码看看 结果

console.log(‘query‘+query_id.innerHTML);  //
console.log(‘query‘+query_class.innerHTML); //// 第一个  222
console.log(‘query‘+query_tagname.innerHTML); //// 第一个  222

query_id.addEventListener(‘click‘,function(){
	console.log(‘click_query_id‘+this.innerHTML);  //‘click surfaces 2222
});
query_class.addEventListener(‘click‘,function(){
	var e=e||window.event;
	console.log(‘click_query_class‘+this.innerHTML);  //‘click surfaces 2222
	e.stopPropagation();
}); 

query_tagname.addEventListener(‘click‘,function(e){
   var e=e||window.event;
	console.log(‘click_query_tagname‘+this.innerHTML);  //‘click surfaces 2222
	e.stopPropagation();
});

上张图 看看控制台的结果

  

然后我们再看看 queryAelectorAll的高级用法

 var $=queryAll = document.querySelectorAll.bind(document);  //集合 个人感觉最犀利   surfaces

var $id=$(‘#box‘);    //id
var $class=$(‘.lione‘);  //class
var $tagname=$(‘li‘);   //tagName

跑一下这段代码看看

var $id=$(‘#box‘);    //id
var $class=$(‘.surfaces‘);  //class
var $tagname=$(‘li‘);   //tagName

console.log(‘queryAll‘+$id[0].innerHTML);
console.log(‘queryAll‘+$class[0].innerHTML); //222
console.log(‘queryAll‘+$tagname[0].innerHTML);//111

$id[0].addEventListener(‘click‘,function(){
	console.log(‘click_queryAll‘+this.innerHTML);  //‘click surfaces 2222
});

$class[0].addEventListener(‘click‘,function(e){
	console.log(‘click_$class‘+this.innerHTML);  //‘click surfaces 2222
	e.stopPropagation();
});

$tagname[0].addEventListener(‘click‘,function(e){
	console.log(‘click_$tagname‘+this.innerHTML);  //‘click surfaces 2222
	e.stopPropagation();
});

  看看控制台的结果

根据上面的用法 我们可以 看看这种写法

var fromId = document.getElementById.bind(document);
var fromClass = document.getElementsByClassName.bind(document);
var fromTag = document.getElementsByTagName.bind(document);
var fromId_box=fromId(‘box‘);
var fromClass_surfaces=fromClass(‘surfaces‘);
var fromTag_li=fromTag(‘li‘);  

console.log(‘fromId‘+fromId_box.innerHTML);
console.log(‘fromClass‘+fromClass_surfaces[0].innerHTML); //222
console.log(‘fromTag‘+fromTag_li[0].innerHTML);//111

写法没啥大问题,但是不推荐;还不如以下的 老老实实的,性能又好;

var doc=document;
var box=doc.getElementById("box");
var li=box.getElementsByTagName("li");
var surfaces=box.getElementsByClassName("surfaces");

  

另外;我们梳理下基于 querySelectorAll的事件绑定,从 Array.prototype中剽窃了 forEach 方法来完成遍历

Array.prototype.forEach.call(document.querySelectorAll(‘.surfaces‘), function(el){
    el.addEventListener(‘click‘, someFunction);
});

//通过 bind()  遍历DOM节点的函数。。
var unboundForEach = Array.prototype.forEach,
    forEach = Function.prototype.call.bind(unboundForEach);

forEach(document.querySelectorAll(‘.surfaces‘), function (el) {
    el.addEventListener(‘click‘, someFunction);
});

http://www.cnblogs.com/surfaces/

关于bind()的用法,    bind()与call(),apply()用法 类似,都是改变当前的this指针。这里简单阐述做个示例;

document.getElementById("box").addEventListener("click",function(){
	var self=this;  //缓存 this 对象
	setTimeout(function(){
		self.style.borderColor=‘red‘;
		},500)
	},false);

document.getElementById("box").addEventListener("click",function(){
	setTimeout(function(){
     this.style.borderColor=‘red‘;
    }.bind(this), 500); //通过bind 传入 this
},false);

  

另外一种事件绑定方法,不在阐述;

//以下是Andrew Lunny已经想出来的一些东西:  https://remysharp.com/2013/04/19/i-know-jquery-now-what#backToTheFutureToday-heading

var $ = document.querySelectorAll.bind(document);
Element.prototype.on = Element.prototype.addEventListener;

$(‘#somelink‘)[0].on(‘touchstart‘, handleTouch);

我们根据这个结合bind 一起使用

//我们将绑定事件在 完善一下
Element.prototype.on = Element.prototype.addEventListener;

document.getElementById("box").on("click",function(){  //on  类似于与jQuery
	setTimeout(function(){
     this.style.borderColor=‘blue‘;
	 console.log(‘on事件 边框变蓝色‘);
    }.bind(this), 500); //通过bind 传入 this 

});

  

关于bind兼容性 扩展;

Function.prototype.bind = Function.prototype.bind || function (target) {
  var self = this;
  return function (args) {
     if (!(args instanceof Array)) {
      args = [args];
     }
    self.apply(target, args);
  }
};

bind扩展阅读:一起Polyfill系列:Function.prototype.bind的四个阶段

时间: 2024-10-12 12:34:35

HTML5中类jQuery选择器querySelector的高级使用的相关文章

HTML5中类jQuery选择器querySelector的使用

HTML5中类jQuery选择器querySelector的使用 简介 HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器.这使得在编写原生JavaScript代码时方便了许多. 用法 两个方法使用差不多的语法,都是接收一个字符串参数,这个参数需要是合法的CSS选择语法. element = document.querySelector('sele

HTML5中类jQuery选择器querySelector和querySelectorAll的使用

支持的浏览IE8+,Firefox3.5+,Safari3.1+ Chrome和Opera 10+ 1.querySelector()方法接收一个选择符,返回第一个匹配的第一个元素,如果没有返回null eg:var body = document.querySelector('body'); var myDiv = document.querySelector('#myDiv'); var selected = document.querySelector('.selected'); var

JQuery选择器转义说明

JQuery选择器 JQuery选择器规则, 借用了css1-3的规则(css选择器规则), 因为css本身也需要一套规则来索引DOM元素, 进而进行样式渲染,例如div.blue 表示目标DOM为 class属性值为blue的div元素. 同时JQuery添加了一些自己的规则, 例如按照查询连接元素 $("[href]"). 这样就衍生出, 一套元字符, 用于表达选择器 合法格式, 故对于 其他部分例如属性值在选择器中的情况, 例如查询href为 www.baidu.com的 链接,

HTML5的JavaScript选择器介绍

在HTML5出现之前使用JavaScript查找DOM元素,有以下三种原生的方法: getElementById:根据指定元素的id属性返回元素 getElementsByName:返回所有指定name属性的元素 getElementsByTagName:返回所有指定标签的元素 HTML5新增的选择器,方法有两种: querySelector:根据选择器规则返回第一个符合要求的元素 querySelectorAll:根据选择器规则返回所有符合要求的元素 支持新的HTML5 JavaScript选

JavaScript强化教程——jQuery选择器

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 -- jQuery选择器 jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $(".intro") 所有 class="intro" 的元素 element $("p") 所有 <p&

我自作聪明,擅自主张的优化了jQuery选择器。

</pre><pre name="code" class="javascript">闲了一会,写篇博客. 最近项目里面,我自作聪明,擅自主张的,自我感觉的优化了一下jQuery选择器.哈哈哈~~~~ ( ﹁ ﹁ ) 我这么想的: jQuery最底层采用getById getByTagName,2.0版本之后结合最近html5的API--getByClassName. 如果没有getByClassName.将进行所搜查找className选择器

使用HTML5的JS选择器操作页面中的元素

上一篇文章介绍了HTML5新增的JavaScript选择器,今晚正式实践一下,使用HTML5的JS选择器操作页面中的元素. 文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>使用HTML5的JS选择器操作页面中的元

Java企业通用平台框架:Bootstrap、HTML5、jQuery、Spring MVC、Mybatis、Hibernate、高性能、高并发

1.适配所有设备(PC.平板.手机等),兼容所有浏览器(Chrome.Firefox.Opera.Safari.IE6~IE11等),适用所有项目(MIS管理信息系统.OA办公系统.ERP企业资源规划系统.CRM客户关系管理系统.网站等). 2.快速开发,敏捷的数据持久层解决方案. 2.1.事务自动处理. 2.2.O/R Mapping基于注解,零配置XML,便于维护,学习成本低. 2.3.接口和实现分离,不需写数据持久层代码,只需写接口,自动生成添加.修改.删除.排序.分页.各种条件的查询等S

HTML5.与JQUERY与AJAX常见面试题

1. HTML5 1.1.简要描述 HTML5中的本地存储 参考答案: 很多时候我们会存储用户本地信息到电脑上,例如:比方说用户有一个填充了一半的长表格,然后突然网络连接断开了,这样用户希望你能存储这些信息到本地,当网络恢复的时他想获取这些信息然后发送到服务器进行存储.现代浏览器拥有的存储被叫做"Local Storage",用于存储这些信息. 1.2.简要描述 HTML5中 Canvas的作用 参考答案: Canvas是 HTML5出现的新标签,拥有自己的属性.方法和事件,其中就有绘