如果您对jquery-selectors–在用户脚本中,使用querySelector()和jQuery的$()有什么好处?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于j
如果您对jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?的详细内容,并且为您提供关于DOM选择器:querySelectorAll和querySelector、HTML DOM querySelectorAll() 代替 jquery的 $('''') CSS选择器、HTML5中类jQuery选择器querySelector的使用、javascript – 为什么要使用jQuery(selector).get(0)而不是jQuery(selector)[0]来获取DOM元素?的有价值信息。
本文目录一览:- jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?
- DOM选择器:querySelectorAll和querySelector
- HTML DOM querySelectorAll() 代替 jquery的 $('''') CSS选择器
- HTML5中类jQuery选择器querySelector的使用
- javascript – 为什么要使用jQuery(selector).get(0)而不是jQuery(selector)[0]来获取DOM元素?
jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?
我开始怀疑这一点,因为我注意到,诚实优秀的Reddit Enhancement Suite包含jQuery作为依赖项,但大多数都坚持使用querySelector()来选择元素和DOM操作的其他基本JavaScript方法.
这只是一个品味问题,还是有理由将jQuery的使用保持在最低限度?
解决方法
也就是说,包括jQuery在内,可能会使简单的脚本变得不必要.它需要在大多数浏览器上使用脚本注入 – 这会破坏沙箱,产生潜在的冲突,并使您的脚本依赖于第三方服务器.
Here is a cross-browser way to include jQuery that minimizes conflicts. And,if the browser supports local jQuery copies,it doesn’t require a third-party server to always be up/fast.
如果脚本很简单,你可以不费力地避免使用jQuery,那就使用querySelector(). 99%的情况下,您的脚本将适用于所有可脚本化的浏览器.
如果脚本无论如何加载jQuery,请使用jQuery选择器以获得最大的功能和一致性.
请注意,对于除最基本的DOM操作之外的任何操作,jQuery通常都是值得的.对于Firefox Greasemonkey或Chrome Tampermonkey,如果使用@require
it,使用jQuery几乎没有任何缺点.
DOM选择器:querySelectorAll和querySelector
这是我写的一个操作dom的小例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo1</title>
<!-- Demo styles -->
<style>
html, body {
position: relative;
height: 100%;
}
body {
background: #eee;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 14px;
color:#000;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="aa"><p>hello</p><p>world</p></div>
<div id="bb"></div>
<div >1</div>
<div>2</div>
<div>3</div>
<script>
function d$(selector){
function Duquery(selector){
this.arr=document.querySelectorAll(selector);
this.len=this.arr.length;
};
Duquery.prototype.init=function(){
for(var i=0;i<this.len;i++){
this[i]=this.arr[i]
};
};
Duquery.prototype.gethtml=function(){
return this[0].innerHTML;
};
Duquery.prototype.sethtml=function(arg){
for(var i=0;i<this.len;i++){
this[i].innerHTML=arg;
};
return this;
};
Duquery.prototype.getcss=function(key){
return this[0].style[key];
};
Duquery.prototype.setcss=function(key,val){
for(var i=0;i<this.len;i++){
this[i].style[key]=val;
};
return this;
};
var obj=new Duquery(selector);
obj.init();
return obj;
};
d$("#bb").sethtml(0000);
d$(".cc").setcss("color","#ffb").sethtml(999999999999);
</script>
</body>
</html>
看这个位置的代码:
利用dom提供的选择器,我们可以找到节点和操作节点,
调用后,我们在预览就发现元素根据js的处理而变化了。
1.querySelectorAll和querySelector兼容性
能力检测属于常用技能之一,我们看下面的能力检测代码:
<script>
if(document.querySelector){
}else{
alert("不支持!");
};
if(document.querySelectorAll){
}else{
alert("不支持!");
};
</script>
结果就是ie6 7不被支持,这个结果是很让人欣喜的,现在的ie6 7已经被几乎弃用,这2个方法我们至少在移动端是可以完美执行的。
2.querySelectorAll和querySelector使用方法
我们已经很熟悉这两个选择器:
document.getElementById(str);
document.getElementsByTagName(str);
写我们的html结果,我们写个2 3级,有id和class就可以了:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo1</title>
<!-- Demo styles -->
<style>
html, body {
position: relative;
height: 100%;
}
body {
background: #eee;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 14px;
color:#000;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="aa">
<p>1</p>
<p>2</p>
<div>
<span>3</span>
<span>4</span>
</div>
</div>
<div id="bb">
<div >5</div>
<div >
<span>6</span>
<span>7</span>
</div>
</div>
</body>
<script>
document.getElementById(str);
document.getElementsByTagName(str);
</script>
</html>
为了测试是否选择到节点,我们元素内的内容作了区分,利用上面2个老的处理方式我们输出1-7。
<script>
alert(document.getElementById("aa").getElementsByTagName("p")[0].innerHTML);
alert(document.getElementById("aa").getElementsByTagName("p")[1].innerHTML);
alert(document.getElementById("aa").getElementsByTagName("div")[0].getElementsByTagName("span")[0].innerHTML);
alert(document.getElementById("aa").getElementsByTagName("div")[0].getElementsByTagName("span")[1].innerHTML);
alert(document.getElementById("bb").getElementsByTagName("div")[0].innerHTML);
alert(document.getElementById("bb").getElementsByTagName("div")[1].getElementsByTagName("span")[0].innerHTML);
alert(document.getElementById("bb").getElementsByTagName("div")[1].getElementsByTagName("span")[1].innerHTML);
</script>
是如此的麻烦,肯定问没有通过类名获取的方法吗?这是是有的,不过兼容性存在问题,假如我们找.bb1,我们就要获取所有元素利用classname进行判断,有的就存入一个数组最后返回。
我们利用最新的方法去获取和返回:
<script>
alert(document.querySelectorAll("#aa p")[0].innerHTML);
alert(document.querySelectorAll("#aa p")[1].innerHTML);
alert(document.querySelectorAll("#aa>div span")[0].innerHTML);
alert(document.querySelectorAll("#aa>div span")[1].innerHTML);
alert(document.querySelectorAll("#bb .bb1")[0].innerHTML);
alert(document.querySelectorAll("#bb .bb2 span")[0].innerHTML);
alert(document.querySelectorAll("#bb .bb2 span")[1].innerHTML);
</script>
参数就是css选择器的形式,而且支持>这种关系选择器,返回的是类数组形式,我们根据下标就可指定获取了。
还有一个没有all的方法,他的用法和上面相同,不过不会以类似数组形式返回,返回的是单个,all的有无就是1和n的区别。
<script>
alert(document.querySelector("#aa p").innerHTML);
</script>
只会返回第一个p的内容。
3.利用querySelectorAll和querySelector开发tab切换效果
效果非常简单,我们简单实践开发使用:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo1</title>
<!-- Demo styles -->
<style>
html, body {
position: relative;
height: 100%;
}
body {
background: #eee;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 14px;
color:#000;
margin: 0;
padding: 0;
}
.tab{ width:500px; height:500px; background:#CCC; margin:100px;}
.tab-nav{ height:40px; line-height:40px; border-bottom:1px solid #fff;}
.tab-nav span{ float:left; margin:0 10px;}
.tab-nav span.focus{ color:#09F;}
.tab-con{ height:450px;}
</style>
</head>
<body>
<div >
<div >
<span >菜单1</span>
<span>菜单2</span>
<span>菜单3</span>
</div>
<div >
<div>内容1</div>
<div >内容2</div>
<div >内容3</div>
</div>
</div>
</body>
<script>
var nlist=document.querySelectorAll(".tab-nav>span");
var clist=document.querySelectorAll(".tab-con>div");
for(var i=0;i<nlist.length;i++){
nlist[i].onclick=function(){
for(var j=0;j<nlist.length;j++){
if(this==nlist[j]){
nlist[j].setAttribute(''class'',"focus");
clist[j].style.display="block";
}else{
nlist[j].removeAttribute(''class'');
clist[j].style.display="none";
}
};
};
};
</script>
</html>
HTML DOM querySelectorAll() 代替 jquery的 $('''') CSS选择器
querySelectorAll()方法返回文档中匹配指定CSS选择器的所有元素,其效果与jquery的$('''')选择器一样,不同的就是querySelectorAll()方法是Js原生方法,无需引入jquery.min.js库。
jquery方法
<!DOCTYPE html>
<html>
<head>
<title>demo</title>
<meta charset="utf-8">
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<div id="a">666</div>
<script type="text/javascript">
var a = $(''#a'').text();
alert(a)
</script>
</body>
</html>
querySelectorAll()方法
<!DOCTYPE html>
<html>
<head>
<title>demo</title>
<meta charset="utf-8">
</head>
<body>
<div id="a">666</div>
<script type="text/javascript">
var a = document.querySelectorAll(''#a'');
alert(a[0].innerText)
</script>
</body>
</html>
为什么jquery会越来越少人用,甚至不少前端程序员开始嫌弃jquery,还是与原生Js的发展有关,原生Js操作Dom的API是越来越方便了。
jquery的Ajax操作,为我们省去了兼容浏览器方面的问题,并且也提供了简明的API去调用get和 post,让开发者从繁琐的兼容性与使用原生API上解脱出来。
但是现在,这个优势也已经非常微小了。不管是原生js的fetch API还是 axios,都为我们提供了强大的Ajax使用能力,并且axios还有拦截器这个优势。相较而言,jquery的Ajax确实已经无法相比了。
有关Fetch Api的,可以看我上一篇文章:https://segmentfault.com/a/11...
HTML5中类jQuery选择器querySelector的使用
简介
HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器。这使得在编写原生JavaScript代码时方便了许多。
用法
两个方法使用差不多的语法,都是接收一个字符串参数,这个参数需要是合法的CSS选择语法。
element = document.querySelector(''selectors''); elementList = document.querySelectorAll(''selectors'');
其中参数selectors 可以包含多个CSS选择器,用逗号隔开。
element = document.querySelector(''selector1,selector2,...''); elementList = document.querySelectorAll(''selector1,selector2,...'');
使用这两个方法无法查找带伪类状态的元素,比如querySelector('':hover'')不会得到预期结果。
querySelector
element = document.querySelector(''div#container'');//返回id为container的首个div element = document.querySelector(''.foo,.bar'');//返回带有foo或者bar样式类的首个元素
querySelectorAll
该方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。
elements = document.querySelectorAll(''div.foo'');//返回所有带foo类样式的div
需要注意的是返回的nodeList集合中的元素是非实时的.
javascript – 为什么要使用jQuery(selector).get(0)而不是jQuery(selector)[0]来获取DOM元素?
HTML:
<form id="myForm"></form>
使用Javascript:
var selector = '#myForm'; var domElement = $(selector).get(0); //Returns [object HTMLFormElement] //Or var domElement = $(selector)[0]; //Also returns [object HTMLFormElement]
> .get()更多是要输入的字符.
>如果$(选择器)为空(未定义),则两种方法都返回相同的结果
> The jQuery documentation on .get()
注意到,您可以简单地使用索引访问器来获取第n个元素,但是您没有获得.get()的其他好处,例如使用负数从数组的末尾返回项.
>此外,您可以调用没有参数的.get()返回jQuery数组的所有DOM元素.
解决方法
<span>1</span> <span>2</span> <span>3</span>
$( “跨度”)得到(-1);指第三跨度.
但是如果您不需要该功能,并且只想选择一个元素.get(0)和[0]是相同的.注意这个[num]:
// jQuery code get: function (num) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object (num < 0 ? this[this.length + num] : this[num]); },
今天关于jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?的分享就到这里,希望大家有所收获,若想了解更多关于DOM选择器:querySelectorAll和querySelector、HTML DOM querySelectorAll() 代替 jquery的 $('''') CSS选择器、HTML5中类jQuery选择器querySelector的使用、javascript – 为什么要使用jQuery(selector).get(0)而不是jQuery(selector)[0]来获取DOM元素?等相关知识,可以在本站进行查询。
本文标签: