如何在网站制作中使用javascript代替Jquery
  • 更新时间:2024-05-12 22:02:37
  • 网站建设
  • 发布时间:11个月前
  • 292

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);  

    然后,基于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界面。

    我们专注高端建站,小程序开发、软件系统定制开发、BUG修复、物联网开发、各类API接口对接开发等。十余年开发经验,每一个项目承诺做到满意为止,多一次对比,一定让您多一份收获!

    本文章出于推来客官网,转载请表明原文地址:https://www.tlkjt.com/web/12117.html

    在线客服

    扫码联系客服

    3985758

    回到顶部