浅谈JS和jQuery优劣
现在各种类库满天飞,说jQuery有多快多快,可是对前端大牛来说,更定不会止步于jQuery,因而常常听到高级的前端工程师追求原生js,为何?答案是原生JS要更快,原因是JQuery这样的库必须要兼容各种浏览器和低版本和许多其他的东西,考虑通用性必然会导致性能的损耗。
当然,我不是提倡写代码纯用原生JS实现,请记住:“框架能够让我们走的更快,但只有了解原生的JS才能让我们走的更远”。
下面直接用代码示例:流行的常用的JQuery功能用原生JS实现。
选择器
JQuery选择器的强大无需赘言,然而在大多数的情况下,我们可以使用相同的代码量用原生JS轻易实现。
1.获取页面所有的div
/* jQuery */ $(\”div\”) /* native equivalent */ document.getElementsByTagName(\”div\”)
2.获取某类名相同的一群元素
/* jQuery */ $(\”.my-class\”) /* native equivalent */ document.querySelectorAll(\”.my-class\”) /* FASTER native equivalent */ document.getElementsByClassName(\”my-class\”)
3.更复杂的一些选择器
/* jQuery */ $(\”.my-class li:first-child\”) /* native equivalent */ document.querySelectorAll(\”.my-class li:first-child\”) /* jQuery */ $(\”.my-class\”).get(0) /* native equivalent */ document.querySelector(\”.my-class\”)
DOM操作JQuery频繁功能就是操作DOM元素,诸如插入或删除一个元素。当然,如果使用原生JS实现这些功能,代码量肯定是会有所增加的,不过我们也可以将这些功能封装成函数,下面是一些常用的DOM操作的原生JS实现。
1.插入HTML元素
/* jQuery */ $(document.body).append(\”<div id=\’myDiv\’><img src=\’im.gif\’/></div>\”); /* CRAPPY native equivalent */ document.body.innerHTML += \”<div id=\’myDiv\’><img src=\’im.gif\’/></div>\”; /* MUCH BETTER native equivalent */ var frag = document.createDocumentFragment(); var myDiv = document.createElement(\”div\”); myDiv.id = \”myDiv\”; var im = document.createElement(\”img\”); im.src = \”im.gif\”; myDiv.appendChild(im); frag.appendChild(myDiv); document.body.appendChild(frag);
CSS操作
在JQuery中可以轻松实现对css的操作,增加属性、删除属性或是检测是否存在某个类。那么你是否觉得使用原生JS实现会很麻烦呢?其实不然,因为有classList。下面是一些关于JQuery css操作的JS原生实现。
// get reference to DOM element var el = document.querySelector(\”.main-content\”); //—-Adding a class—— /* jQuery */ $(el).addClass(\”someClass\”); /* native equivalent */ el.classList.add(\”someClass\”); //—-Removing a class—– /* jQuery */ $(el).removeClass(\”someClass\”); /* native equivalent */ el.classList.remove(\”someClass\”); //—-Does it have class— /* jQuery */ if($(el).hasClass(\”someClass\”)) /* native equivalent */ if(el.classList.contains(\”someClass\”))
当我们简单地逐个设置Css的属性,而并非将它们全部传递给JQuery的Css函数时,性能明显会快很多。而且,真的不会添加什么额外的代码。
// get reference to a DOM element var el = document.querySelector(\”.main-content\”); //—-Setting multiple CSS properties—- /* jQuery */ $(el).css({ background: \”#FF0000\”, \”box-shadow\”: \”1px 1px 5px 5px red\”, width: \”100px\”, height: \”100px\”, display: \”block\” }); /* native equivalent */ el.style.background = \”#FF0000\”; el.style.width = \”100px\”; el.style.height = \”100px\”; el.style.display = \”block\”; el.style.boxShadow = \”1px 1px 5px 5px red\”;
show与hideshow()与hide()应该也是JQuery中十分常用的方法,原生JS实现同样轻松。
// get reference to a DOM element var el = document.querySelector(\”.main-content\”); //—-show() or hide()—- /* jQuery */ $(el).show(); $(el).hide(); /* native equivalent */ el.style.display = \’\’; el.style.display = \’none\’;
事件绑定
// get reference to a DOM element var el = document.querySelector(\”.main-content\”); //—-Event Listener off—- /* jQuery */ $(el).off(eventName, eventHandler); /* native equivalent */ el.removeEventListener(eventName, eventHandler); //—-Event Listener on—- /* jQuery */ $(el).on(eventName, eventHandler); /* native equivalent */ el.addEventListener(eventName, eventHandler);
jQuery的确是个了不起的库,如果同样轻松的使用JS实现jQuery,尽量使用JS。即使优化有点吹毛求疵,由于html5游戏的迅速崛起,这点优化就显得格外的宝贵。
文/丁向明
做一个有博客的web前端自媒体人,专注web前端开发,关注用户体验,加我qq/微信交流:6135833
http://dingxiangming.com
jquery 选择器用法大全附实例代码
学习jquery必不可少的一项技能就是需要学会使用jquery查找和操作html元素,这就是jquery选择器,小叶总结了下面一篇文章在我们开发中常用的jquery选择器的方法,欢迎收藏。
以下是一些常用的 jQuery 选择器及其实例代码:
- $(\”element\”): 选择所有指定的元素。
- $(\”#id\”): 选择具有指定 ID 的元素。
- $(\”.class\”): 选择具有指定类的所有元素。
- $(\”[attribute]\”): 选择具有指定属性的所有元素。
- $(\”[attribute=value]\”): 选择具有指定属性值的元素。
- $(selector1, selector2): 在第二个选择器中查找第一个选择器。
- $(ancestor descendant): 选择祖先元素下的所有后代元素。
- $(prev + next): 选择紧接在 prev 元素后的 next 元素。
- $(prev ~ siblings): 选择 prev 元素之后的所有 siblings 元素。
- $(parent > child): 选择父元素下的所有子元素。
- $(\”:input\”): 选择所有表单输入元素(如 input、textarea、select)。
- $(\”:text\”): 选择所有单行文本框。
- $(\”:password\”): 选择所有密码框。
- $(\”:radio\”): 选择所有单选按钮。
- $(\”:checkbox\”): 选择所有复选框。
- $(\”:submit\”): 选择所有提交按钮。
- $(\”:reset\”): 选择所有重置按钮。
- $(\”:contains(text)\”): 选择包含指定文本的元素。
- $(\”:empty\”): 选择不包含子元素或文本的元素。
- $(\”:has(selector)\”): 选择包含特定后代元素的元素。
- $(\”:parent\”): 选择至少有一个子元素的元素。
如果你觉得这篇文章对你有用,欢迎点赞收藏加关注哦。
详解JQuery框架的五大选择器
此账号为华为云开发者社区官方运营账号,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态
本文分享自华为云社区《 【JQuery框架】五大选择器“全家桶”详解!!!》,原文作者:灰小猿 。
今天来和大家分享一下JQuery的五种选择器的详细使用方法,那么何为选择器?从功能上来讲,它能够筛选具有相似特征的元素标签,在我们想要对具有相似特征的元素进行集中或统一操作时是十分有用的。
首先我们需要了解选择器使用的基本操作,该基本操作可以分为三步:
选择器的使用需要进行事件的绑定,一般来说我们可以将事件绑定到一个按钮上去,通过按钮的点击来触发相应的事件响应。
同时在jQuery中,这样的事件绑定是需要写在一个入口函数中去的,在<script></script>的代码段中建立入口函数的语法是:
在这里需要注意的是:在js中定义入口函数的window.onload方法和$(function)方法是有区别的,
具体如下:
window.onload只能定义一次,如果定义多次,后面的会将前面的覆盖掉
$(function)方法是可以定义多次的,后面的不会将前面的覆盖掉
当我们对选择器的事件进行了绑定之后,我们就可以通过选择器进行相应元素的样式控制了,在这里通常的表现是css方法,通过css方法来对相应的元素样式进行修改。
来看一个基本操作的实例:
那么接下来就通过实例分别来和大家讲一下jQuery框架下的五种选择器的使用方法。
标签选择器又称为“元素选择器”,
语法:$(“html标签名”)
作用:获得所有匹配标签元素名称的元素
语法:$(“#id的属性值”)
作用:获得与指定id属性值匹配的元素
语法:$(“.class的属性选择器”)
作用:获得与指定class属性值匹配的元素
语法:$(“选择器1,选择器2….”)
获取多个选择器选中的所有元素
语法:$(“A B”)
作用:选择A元素内部的所有B元素
语法:$(“A > B”)
作用:选择A元素内部的所有B子元素
在这里需要注意的是:这两个选择器看上去似乎没有什么区别,但是我们在使用时就会发现其实是有区别的,后代选择器会将元素A内部的所有B元素都选中,而子选择器只会选中元素A的下一级元素中的B元素,范围是小于后代选择器的。具体可以看下面的实例:
语法:$(“A[属性名]”)
作用:包含指定属性的选择器
语法:$(“A[属性名=’值’]”)
作用:包含指定属性等于指定值的选择器,
在这个选择器中,我们可以根据他的功能进行拓展,比如我们可以将:
“=”换成“!=”,就是指定属性名称不等于指定值的选择器
“=”换成“^=”,就是指定属性名称是以指定值开头的选择器
“=”换成“$=”,就是指定属性名称是以指定值结尾的选择器
“=”换成“*=”,就是指定属性名称中包含指定值的选择器
语法:$(“A[属性名=’值’][]…”)
作用:包含多个属性条件的选择器
语法:$(“A:first”)
作用:获得选择的元素的第一个元素
语法:$(“A:last”)
作用:获得选择的元素的最后一个元素
语法:$(“not(selector)”)
作用:不包括指定内容的元素
语法:$(“A:even”)
作用:从0开始计数,获得选择的元素中索引为偶数的元素
语法:$(“A:odd”)
作用:从0开始计数,获得选择的元素中索引为奇数的元素
语法:$(“A:eq(index)”)
作用:获得选择的元素中指定索引的元素
语法:$(“A:gt(index)”)
作用:获得选择的元素中大于指定索引的元素
语法:$(“A:lt(index)”)
作用:获得选择的元素中小于指定索引的元素
语法:$(“:header”)
作用:获得标题(h1~h6)元素,为固定写法
语法:$(“A:enabled”)
作用:获得选择元素中的可用元素
语法:$(“A:disabled”)
作用:获得选择元素中的不可用元素
语法:$(“A:checked”)
作用:获得单选/复选框选中的元素
语法:$(“A:selected”)
作用:获得下拉框选中的元素
在这里需要注意一点:上面的两个选中选择器的作用对象是不一样的,第一个选中选择器的作用对象是单选/复选框,而第二个选中选择器的作用对象是下拉框,同时对于第二种选择器,它的作用内容是下拉框中的包含在<option></option>内的选项,因此在使用时应当使用“>”来具体说明,具体可以看下面的实例:
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。