GVKun编程网logo

jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?

21

如果您对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的$()有什么好处?

jquery-selectors – 在用户脚本中,使用querySelector()和jQuery的$()有什么好处?

在用户脚本中使用querySelector()vs jQuery的$()是否有任何优势?我希望该脚本适用于支持用户脚本的所有主流浏览器,因此我对跨浏览器兼容性特别感兴趣.

我开始怀疑这一点,因为我注意到,诚实优秀的Reddit Enhancement Suite包含jQuery作为依赖项,但大多数都坚持使用querySelector()来选择元素和DOM操作的其他基本JavaScript方法.

这只是一个品味问题,还是有理由将jQuery的使用保持在最低限度?

解决方法

使用querySelector()或querySelectorAll()的唯一原因是你不使用jQuery.与高级CSS选择器相比,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选择器: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选择器

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中类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元素?

javascript – 为什么要使用jQuery(selector).get(0)而不是jQuery(selector)[0]来获取DOM元素?

如果我只想将jQuery数组中的第一个项目作为DOM元素,那么使用jQuery是否有利于$(selector).get(0)超过$(selector)[0]

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元素.

解决方法

.get允许您使用负指数.例如:
<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元素?等相关知识,可以在本站进行查询。

本文标签: