INSIGHTS & SHARING / 观点与分享

如何在网站制作中使用javascript代替Jquery

网站建设 阅读 750

jQuery 是当今最流行的JavaScript 工具库。

据统计,目前全球有57.3%的网站使用它。换句话说,在10 个网站中,有6 个使用jQuery。如果我们只看使用工具库的网站制作,这个比例上升到惊人的91.7%。

尽管jQuery 如此流行,但其臃肿的体积也让人头疼。 jQuery 2.0原始大小为235KB,优化后大小为81KB;如果jQuery 1.8.3 支持IE6、7、8,则原始大小为261KB,优化后大小为91KB。

这样的体积,即使在宽带环境下也需要1秒甚至更长时间才能完全加载,更不用说移动设备了。这意味着如果你使用jQuery,用户将至少在1 秒后看到页面的效果。考虑到jQuery本质上只是一个操作DOM的工具,我们不仅要问:如果只是为了几个网页特效,有必要用这么大的库吗?

2006年,jQuery诞生时,主要用于消除不同浏览器(主要是IE6)之间的差异,为开发者提供简洁统一的界面。从那时起,今天的情况发生了很大变化。 IE的市场份额持续下降,基于ECMAScript的JavaScript标准语法得到越来越广泛的支持。开发者可以直接使用标准的JavaScript语法同时在所有主流浏览器中运行,不再需要通过jQuery获取兼容性。

下面我们就来讨论一下如何使用JavaScript标准语法来替代jQuery的一些主要功能,让jQuery-free。

一、选取DOM元素

jQuery的核心是通过各种选择器选择DOM元素,可以通过querySelectorAll方法来模拟。

var$=document.querySelectorAll.bind(文档);

这里需要注意的是querySelectorAll方法返回的是一个NodeList对象,这个对象很像数组(有数值索引和length属性),但它不是数组,不能使用pop和pop等数组特有的方法推。如有必要,请考虑将Nodelist 对象转换为数组。

myList=Array.prototype.slice.call(myNodeList);

二、DOM操作

DOM本身有非常丰富的操作方法,可以替代jQuery提供的操作方法。

在末尾附加DOM 元素。

//jQuery写法

$(父).append($(子));

//DOM写入方法

parent.appendChild(孩子)

标题被插入到DOM 元素中。

//jQuery写法

$(parent).prepend($(child));

//DOM写入方法

父母。 insertBefore(child, parent.childNodes[0])

移除一个DOM 元素。

//jQuery写法

$(孩子)。消除()

//DOM写入方法

孩子。父节点。移除孩子(孩子)

三、事件的监听

jQuery的on方法可以通过addEventListener来模拟。

Element.prototype.on=Element.prototype.addEventListener;

为了方便使用,这个方法也可以部署在NodeList对象上。

NodeList.prototype.on=函数(事件,fn){

  • []['forEach'].call(this, function (el) {  
  • el.on(event, fn);  
  • });  
  • return this;  
  • }; 
  • 四、事件的触发

    jQuery的trigger方法则需要单独部署,相对复杂一些。

    1. Element.prototype.trigger = function (type, data) {  
    2. var event = document.createEvent('HTMLEvents');  
    3. event.initEvent(type, true, true);  
    4. event.data = data || {};  
    5. event.eventName = type;  
    6. event.target = this;  
    7. this.dispatchEvent(event);  
    8. return this;  
    9. }; 

    在NodeList对象上也部署这个方法。

    1. NodeList.prototype.trigger = function (event) {  
    2. []['forEach'].call(this, function (el) {  
    3. el['trigger'](event);  
    4. });  
    5. return this;  
    6. }; 

    五、document.ready

    目前的最佳实践,是将JavaScript脚本文件都放在页面底部加载。这样的话,其实document.ready方法(jQuery简写为$(function))已经不必要了,因为等到运行的时候,DOM对象已经生成了。

    六、attr方法

    jQuery使用attr方法,读写网页元素的属性。

    1.  $("#picture").attr("src", "http://url/to/image"); 

    DOM元素允许直接读取属性值,写法要简洁许多。

    1. $("#picture").src = "http://url/to/image"; 

    需要注意,input元素的this.value返回的是输入框中的值,链接元素的this.href返回的是绝对URL。如果需要用到这两个网页元素的属性准确值,可以用this.getAttribute('value')和this.getAttibute('href')。

    七、addClass方法

    jQuery的addClass方法,用于为DOM元素添加一个class。

    1. $('body').addClass('hasJS'); 

    DOM元素本身有一个可读写的className属性,可以用来操作class。

    1. document.body.className = 'hasJS';  
    2. // or  
    3. document.body.className += ' hasJS';  

    HTML 5还提供一个classList对象,功能更强大(IE 9不支持)。

    1. document.body.classList.add('hasJS');  
    2. document.body.classList.remove('hasJS');  
    3. document.body.classList.toggle('hasJS');  
    4. document.body.classList.contains('hasJS'); 

    八、CSS

    jQuery的css方法,用来设置网页元素的样式。

    1. $(node).css( "color", "red" ); 

    DOM元素有一个style属性,可以直接操作。

    1. element.style.color = "red";;  
    2. // or  
    3. element.style.cssText += 'color:red'; 

    九、数据储存

    jQuery对象可以储存数据。

    1. $("body").data("foo", 52); 

    HTML 5有一个dataset对象,也有类似的功能(IE 10不支持),不过只能保存字符串。

    1. element.dataset.user = JSON.stringify(user);  
    2. element.dataset.score = score; 

    十、Ajax

    jQuery的Ajax方法,用于异步操作。

    1. $.ajax({  
    2. type: "POST",  
    3. url: "some.php",  
    4. data: { name: "John", location: "Boston" }  
    5. }).done(function( msg ) {  
    6. alert( "Data Saved: " + msg );  
    7. }); 

    我们可以定义一个request函数,模拟Ajax方法。

    1. function request(type, url, opts, callback) {  
    2. var xhr = new XMLHttpRequest();  
    3. if (typeof opts === 'function') {  
    4. callback = opts;  
    5. opts = null;  
    6. }  
    7. xhr.open(type, url);  
    8. var fd = new FormData();  
    9. if (type === 'POST' && opts) {  
    10. for (var key in opts) {  
    11. fd.append(key, JSON.stringify(opts[key]));  
    12. }  
    13. }  
    14. xhr.onload = function () {  
    15. callback(JSON.parse(xhr.response));  
    16. };  
    17. xhr.send(opts ? fd : null);  
    18. } 

    然后,基于request函数,模拟jQuery的get和post方法。

    1. var get = request.bind(this, 'GET');  
    2. var post = request.bind(this, 'POST'); 

    十一、动画

    jQuery的animate方法,用于生成动画效果。

    1. $foo.animate('slow', { x: '+=10px' }); 

    jQuery的动画效果,很大部分基于DOM。但是目前,CSS 3的动画远比DOM强大,所以可以把动画效果写进CSS,然后通过操作DOM元素的class,来展示动画。

    1. foo.classList.add('animate'); 

    如果需要对动画使用回调函数,CSS 3也定义了相应的事件。

    1. el.addEventListener("webkitTransitionEnd", transitionEnded);  
    2.  
    3. el.addEventListener("transitionend", transitionEnded);  

    十二、替代方案

    由于jQuery体积过大,替代方案层出不穷。

    其中,最有名的是zepto.js。它的设计目标是以最小的体积,做到最大兼容jQuery的API。zepto.js 1.0版的原始大小是55KB,优化后是29KB,gzip压缩后为10KB。

    如果不求最大兼容,只希望模拟jQuery的基本功能,那么,min.js优化后只有200字节,而dolla优化后是1.7KB。

    此外,jQuery本身采用模块设计,可以只选择使用自己需要的模块。具体做法参见它的github网站,或者使用专用的Web界面。

    本文来自推来客官网,转载请注明原文地址:
    https://www.99hyw.cn/web/12117.html

    NINE REASONS TO CHOOSE US

    选择推来客,九大优势

    从开发效果到后续服务,
    把每一份信任,落到实处。

    01 / 效果

    效果做到满意为止

    认真打磨每一个细节,用实际效果回应您的期待。

    02 / 价值

    高性价比

    让投入回到业务价值,兼顾品质、功能与开发成本。

    03 / 技术

    专业技术团队

    理解业务需求,以专业技术推进项目落地。

    04 / 经验

    10年+运营经验

    长期深耕开发与运营,让经验成为项目的底气。

    05 / 积累

    成品项目多

    丰富的项目积累,为不同场景提供更多成熟参考。

    06 / 费用

    无任何增加费用

    费用明晰透明,合作过程清楚放心。

    07 / 口碑

    行业良好的口碑

    用交付与服务积累认可,珍惜每一次客户推荐。

    08 / 售后

    完善的售后机制

    项目交付后持续提供服务,让系统使用更安心。

    09 / 交付

    源码交付,自主掌握

    项目源码完整交付,后续维护与迭代自主掌握。

    我们的服务

    软件系统开发

    围绕业务流程,提供软件系统设计与开发服务。

    小程序开发

    结合使用场景,提供小程序设计与功能开发服务。

    高端网站建设

    结合品牌展示与业务需求,提供网站设计与建设服务。

    物联网 / API 对接

    连接设备与业务系统,提供接口集成与数据对接服务。

    SELECTED WORK

    推荐案例,让想法落地

    更多项目案例

    在线客服

    扫码联系客服

    3985758

    回到顶部