- 浏览: 198096 次
文章分类
最新评论
一、选取DOM元素
jQuery的核心是通过各种选择器,选中DOM元素,可以用querySelectorAll方法模拟这个功能。
var $ = document.querySelectorAll.bind(document);
这里需要注意的是,querySelectorAll方法返回的是NodeList对象,它很像数组(有数字索引和length属
性),但不是数组,不能使用pop、push等数组特有方法。如果有需要,可以考虑将Nodelist对象转为数组。
myList = Array.prototype.slice.call(myNodeList);
二、DOM操作
DOM本身就具有很丰富的操作方法,可以取代jQuery提供的操作方法。
尾部追加DOM元素。
// jQuery写法
$(parent).append($(child));
// DOM写法
parent.appendChild(child)
头部插入DOM元素。
// jQuery写法
$(parent).prepend($(child));
// DOM写法
parent.insertBefore(child, parent.childNodes[0])
删除DOM元素。
// jQuery写法
$(child).remove()
// DOM写法
child.parentNode.removeChild(child)
三、事件的监听
jQuery的on方法,完全可以用addEventListener模拟。
Element.prototype.on = Element.prototype.addEventListener;
为了使用方便,可以在NodeList对象上也部署这个方法。
NodeList.prototype.on = function (event, fn) {
[]['forEach'].call(this, function (el) {
el.on(event, fn);
});
return this;
};
四、事件的触发
jQuery的trigger方法则需要单独部署,相对复杂一些。
Element.prototype.trigger = function (type, data) {
var event = document.createEvent('HTMLEvents');
event.initEvent(type, true, true);
event.data = data || {};
event.eventName = type;
event.target = this;
this.dispatchEvent(event);
return this;
};
在NodeList对象上也部署这个方法。
NodeList.prototype.trigger = function (event) {
[]['forEach'].call(this, function (el) {
el['trigger'](event);
});
return this;
};
五、document.ready
目前的最佳实践,是将JavaScript脚本文件都放在页面底部加载。这样的话,其实document.ready方法
(jQuery简写为$(function))已经不必要了,因为等到运行的时候,DOM对象已经生成了。
六、attr方法
jQuery使用attr方法,读写网页元素的属性。
$("#picture").attr("src", "http://url/to/image");
DOM元素允许直接读取属性值,写法要简洁许多。
$("#picture").src = "http://url/to/image";
需要注意,input元素的this.value返回的是输入框中的值,链接元素的this.href返回的是绝对URL。如果需要用
到这两个网页元素的属性准确值,可以用this.getAttribute('value')和this.getAttibute('href')。
七、addClass方法
jQuery的addClass方法,用于为DOM元素添加一个class。
$('body').addClass('hasJS');
DOM元素本身有一个可读写的className属性,可以用来操作class。
document.body.className = 'hasJS';
// or
document.body.className += ' hasJS';
HTML 5还提供一个classList对象,功能更强大(IE 9不支持)。
document.body.classList.add('hasJS');
document.body.classList.remove('hasJS');
document.body.classList.toggle('hasJS');
document.body.classList.contains('hasJS');
八、CSS
jQuery的css方法,用来设置网页元素的样式。
$(node).css( "color", "red" );
DOM元素有一个style属性,可以直接操作。
element.style.color = "red";;
// or
element.style.cssText += 'color:red';
九、数据储存
jQuery对象可以储存数据。
$("body").data("foo", 52);
HTML 5有一个dataset对象,也有类似的功能(IE 10不支持),不过只能保存字符串。
element.dataset.user = JSON.stringify(user);
element.dataset.score = score;
十、Ajax
jQuery的Ajax方法,用于异步操作。
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
我们可以定义一个request函数,模拟Ajax方法。
function request(type, url, opts, callback) {
var xhr = new XMLHttpRequest();
if (typeof opts === 'function') {
callback = opts;
opts = null;
}
xhr.open(type, url);
var fd = new FormData();
if (type === 'POST' && opts) {
for (var key in opts) {
fd.append(key, JSON.stringify(opts[key]));
}
}
xhr.onload = function () {
callback(JSON.parse(xhr.response));
};
xhr.send(opts ? fd : null);
}
然后,基于request函数,模拟jQuery的get和post方法。
var get = request.bind(this, 'GET');
var post = request.bind(this, 'POST');
十一、动画
jQuery的animate方法,用于生成动画效果。
$foo.animate('slow', { x: '+=10px' });
jQuery的动画效果,很大部分基于DOM。但是目前,CSS 3的动画远比DOM强大,所以可以把动画效果写进
CSS,然后通过操作DOM元素的class,来展示动画。
foo.classList.add('animate');
如果需要对动画使用回调函数,CSS 3也定义了相应的事件。
el.addEventListener("webkitTransitionEnd", transitionEnded);
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界面。
jQuery的核心是通过各种选择器,选中DOM元素,可以用querySelectorAll方法模拟这个功能。
var $ = document.querySelectorAll.bind(document);
这里需要注意的是,querySelectorAll方法返回的是NodeList对象,它很像数组(有数字索引和length属
性),但不是数组,不能使用pop、push等数组特有方法。如果有需要,可以考虑将Nodelist对象转为数组。
myList = Array.prototype.slice.call(myNodeList);
二、DOM操作
DOM本身就具有很丰富的操作方法,可以取代jQuery提供的操作方法。
尾部追加DOM元素。
// jQuery写法
$(parent).append($(child));
// DOM写法
parent.appendChild(child)
头部插入DOM元素。
// jQuery写法
$(parent).prepend($(child));
// DOM写法
parent.insertBefore(child, parent.childNodes[0])
删除DOM元素。
// jQuery写法
$(child).remove()
// DOM写法
child.parentNode.removeChild(child)
三、事件的监听
jQuery的on方法,完全可以用addEventListener模拟。
Element.prototype.on = Element.prototype.addEventListener;
为了使用方便,可以在NodeList对象上也部署这个方法。
NodeList.prototype.on = function (event, fn) {
[]['forEach'].call(this, function (el) {
el.on(event, fn);
});
return this;
};
四、事件的触发
jQuery的trigger方法则需要单独部署,相对复杂一些。
Element.prototype.trigger = function (type, data) {
var event = document.createEvent('HTMLEvents');
event.initEvent(type, true, true);
event.data = data || {};
event.eventName = type;
event.target = this;
this.dispatchEvent(event);
return this;
};
在NodeList对象上也部署这个方法。
NodeList.prototype.trigger = function (event) {
[]['forEach'].call(this, function (el) {
el['trigger'](event);
});
return this;
};
五、document.ready
目前的最佳实践,是将JavaScript脚本文件都放在页面底部加载。这样的话,其实document.ready方法
(jQuery简写为$(function))已经不必要了,因为等到运行的时候,DOM对象已经生成了。
六、attr方法
jQuery使用attr方法,读写网页元素的属性。
$("#picture").attr("src", "http://url/to/image");
DOM元素允许直接读取属性值,写法要简洁许多。
$("#picture").src = "http://url/to/image";
需要注意,input元素的this.value返回的是输入框中的值,链接元素的this.href返回的是绝对URL。如果需要用
到这两个网页元素的属性准确值,可以用this.getAttribute('value')和this.getAttibute('href')。
七、addClass方法
jQuery的addClass方法,用于为DOM元素添加一个class。
$('body').addClass('hasJS');
DOM元素本身有一个可读写的className属性,可以用来操作class。
document.body.className = 'hasJS';
// or
document.body.className += ' hasJS';
HTML 5还提供一个classList对象,功能更强大(IE 9不支持)。
document.body.classList.add('hasJS');
document.body.classList.remove('hasJS');
document.body.classList.toggle('hasJS');
document.body.classList.contains('hasJS');
八、CSS
jQuery的css方法,用来设置网页元素的样式。
$(node).css( "color", "red" );
DOM元素有一个style属性,可以直接操作。
element.style.color = "red";;
// or
element.style.cssText += 'color:red';
九、数据储存
jQuery对象可以储存数据。
$("body").data("foo", 52);
HTML 5有一个dataset对象,也有类似的功能(IE 10不支持),不过只能保存字符串。
element.dataset.user = JSON.stringify(user);
element.dataset.score = score;
十、Ajax
jQuery的Ajax方法,用于异步操作。
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
我们可以定义一个request函数,模拟Ajax方法。
function request(type, url, opts, callback) {
var xhr = new XMLHttpRequest();
if (typeof opts === 'function') {
callback = opts;
opts = null;
}
xhr.open(type, url);
var fd = new FormData();
if (type === 'POST' && opts) {
for (var key in opts) {
fd.append(key, JSON.stringify(opts[key]));
}
}
xhr.onload = function () {
callback(JSON.parse(xhr.response));
};
xhr.send(opts ? fd : null);
}
然后,基于request函数,模拟jQuery的get和post方法。
var get = request.bind(this, 'GET');
var post = request.bind(this, 'POST');
十一、动画
jQuery的animate方法,用于生成动画效果。
$foo.animate('slow', { x: '+=10px' });
jQuery的动画效果,很大部分基于DOM。但是目前,CSS 3的动画远比DOM强大,所以可以把动画效果写进
CSS,然后通过操作DOM元素的class,来展示动画。
foo.classList.add('animate');
如果需要对动画使用回调函数,CSS 3也定义了相应的事件。
el.addEventListener("webkitTransitionEnd", transitionEnded);
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界面。
发表评论
-
不会Object.defineProperty你就out了
2017-12-05 09:30 524http://imweb.io/topic/56d40adc ... -
avalon如何在兼容ie的情况下做到双向绑定呢?
2017-12-05 09:37 1205avalon可以兼容到ie6,貌似它的双 ... -
前端设备指纹
2017-09-05 19:33 2888前端设备指纹的生成,可使用fingerprintjs2 ... -
JS中document.execCommand()的用法
2016-08-14 12:36 835document.execCommand()方法处理Htm ... -
Javascript标准DOM Range操作
2016-08-13 16:40 18082级DOM定义了一个createRange()方法,如果是 ... -
js 中的selection对象使用笔记+光标定位
2016-08-13 15:39 8941IE:document.selection Fir ... -
require.js模块加载器的基本用法
2016-02-01 17:44 695require.js是一种基于AMD ... -
JS中的双向数据绑定及Object.defineProperty方法
2016-08-13 15:42 556缘起 前几天在看一些流行的迷你mvvm框架(比如 ava ... -
window.onload、DOMContentLoaded和$(document).ready()
2016-01-15 14:43 870<html xmlns="http://ww ... -
JS中浮点数运算误差处理
2015-10-22 16:11 1227先来个简单的代码片段: > console.log ... -
动画缓动效果
2015-06-30 09:54 710<!DOCTYPE html> <ht ... -
这些年,我收集的JavaScript代码(一)
2015-06-08 09:12 496一、取URL中的参数 function getPara ... -
JS中手动触发事件的方法
2015-06-05 13:51 1450如果大家将一张网页看成一个form的话,大致上就成了一个 ... -
javascript oop编程 — 实现继承的三种形式(3)
2015-05-26 15:27 554工厂制造新对象这个继承的想法相对简单,就是你需要什么 工厂制造 ... -
javascript oop编程 — 实现继承的三种形式(2)
2015-05-26 15:27 529借助另一个函数的过程,修改他的context来实现,假设两个类 ... -
javascript oop编程 — 实现继承的三种形式(1)
2015-05-26 15:24 732(1)模拟类的方式, 我们都知道js是原型继承机制,不存 ... -
JavaScript内存优化
2015-03-17 17:55 821相对C/C++ 而言,我们所用的JavaScript 在内存 ... -
js 中 document.createEvent的用法-转载
2014-03-13 14:48 1060<a class="comment-mod& ... -
本地图片上传即时预览
2013-10-28 20:25 770// 图片预览功能var preivew = functi ...
相关推荐
ECMAScript规范定义了JavaScript的基础语法,而各种JavaScript库和框架,如jQuery、React、Vue.js等,则为开发者提供了更高级的功能和便利。 其次,Flash曾是互联网上多媒体内容的主流格式,尤其在早期网络视频和...
自2006年发布以来,jQuery已经成为了前端开发的标准工具之一,尤其在处理浏览器兼容性和提高开发效率方面表现突出。 ### jQuery的核心概念 1. **选择器**: jQuery借鉴了CSS的选择器语法,允许开发者快速定位到DOM...
jQuery使得开发者能够更快速、更容易地编写JavaScript代码,它的语法简洁明了,大大降低了JavaScript编程的复杂性。在AJAX应用中,jQuery提供了方便的$.ajax()方法,简化了发送异步请求的过程,并提供了丰富的回调...
在Web开发领域,Flash曾是实现动态效果和交互的主要工具,但随着移动设备的普及和HTML5技术的发展,Flash逐渐被jQuery等JavaScript库取代。jQuery以其易用性和丰富的插件库,使得开发者能够轻松实现复杂的网页交互...
JavaScript API 是一种重要的编程接口,它允许开发者使用JavaScript语言与各种Web服务、浏览器功能或库进行交互。在Web前端开发中,JavaScript API 的运用广泛,是构建动态、交互性强的网页应用的基础。本资料主要...
总的来说,JavaScript是一门功能强大、应用场景广泛的编程语言,深入学习并掌握JavaScript,对于Web开发人员至关重要。这个“javascript”压缩包中的“JavaScript.chm”文件很可能是一个详细的JavaScript帮助文档,...
尽管现在许多现代前端框架已经取代了JQuery的一些功能,但在很多老项目或简单应用中,JQuery依然被广泛使用。 3. **Visual C++**:是Microsoft公司提供的一个集成开发环境,主要用于C++编程。它包括编译器、调试器...
在互联网的早期,VBScript主要在Internet Explorer浏览器中使用,而JavaScript则得到了所有主流浏览器的支持,成为了事实上的网页脚本标准。 VBScript是由微软公司开发的一种轻量级、解释型的脚本语言,它源自...
6. **jQuery中的JSON操作**:虽然jQuery主要用于DOM操作和事件处理,但它也提供了`$.parseJSON()`(在jQuery 3.0后被`$.getJSON()`取代)和`$.ajax()`等方法来处理JSON数据。例如,从服务器获取JSON数据: ```...
JavaScript和JScript是两种在Web开发中广泛使用的脚本语言,它们主要负责网页的动态交互和数据处理。本文将深入探讨这两个语言的核心概念、语法差异以及实际应用。 首先,JavaScript,由 Netscape 公司在1995年发明...
JavaScript的第一个标准是ECMA-262,它定义了语言的组成部分,包括语法、类型、语句、关键字、保留字、操作符和对象。JavaScript主要由三个部分组成:ECMAScript(核心)、DOM(文档对象模型)和BOM(浏览器对象模型...
jQuery,这个JavaScript库,自2006年发布以来,就以其简洁的API和强大的功能,极大地推动了前端开发的进步。1.8.3版是jQuery历史上的一个重要版本,它在优化性能、增强兼容性和稳定性方面做出了显著贡献。本文将深入...
随着 ES6(ECMAScript 2015)及后续版本的推出,JavaScript 的功能和语法得到了显著增强,包括类、模块化、箭头函数等新特性,使得它在构建复杂应用时更加得心应手。 在 JavaScript 的世界里,有许多流行的库和框架...
5. **DHTML行为**:旧版IE浏览器支持的DHTML行为,允许通过JavaScript代码响应用户交互,不过现在已被更广泛的JavaScript标准取代。 6. **时间线和动画**:通过JavaScript实现时间线管理和动画效果,如计时器...
在JavaScript的历史中,有一些功能或语法随着时间的推移被废弃,因为它们被更有效、更安全的替代品所取代。例如,`document.write()`曾被广泛用于向HTML文档动态写入内容,但现在它被视为不推荐使用的,因为它可能...
JavaScript,也被称为JS,是一种广泛应用于网页和网络应用的编程语言,主要负责客户端的动态交互。它是Web开发中的核心技术之一,与HTML和CSS一起构建了网页的“前端铁三角”。在"常用javascript脚本"这个主题中,...
JavaScript API 是一种重要的编程接口,它允许开发者使用JavaScript语言与各种环境进行交互,如浏览器、服务器、桌面应用等。JavaScript API 提供了一系列的函数、对象和方法,使得开发者能够实现丰富的功能,包括...
4. **JQuery**:JQuery是一个流行的JavaScript库,简化了DOM操作、事件处理、动画和Ajax交互。它的API简洁易用,能快速实现常见功能,如元素选择、DOM操作和特效。 5. **Ajax (异步JavaScript和XML)**:Ajax是一种...
然而,随着Web技术的飞速发展,尤其是ES6标准的普及,许多原本需要jQuery的功能现在可以直接用原生JavaScript实现,而且性能更优。"you-dont-need-jquery"项目正是基于这样的理念,它展示了如何在不依赖jQuery的情况...
然而,随着Web技术的快速发展,特别是ES6和现代前端框架如React、Vue和Angular的崛起,jQuery的一些功能逐渐被替代。"components:jQuery的UX组件"项目已经停止,这表明开发者可能需要寻找更现代的解决方案来满足用户...