jQuery与DOM的区别

2024-06-22 17:48

本文主要是介绍jQuery与DOM的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 概述

2 选取DOM元素

2.1 dom和jQuery对象转换

2.2 dom和jQuery的入口函数的区别

2.2.1 jQuery的入口加载函数

2.2.2 dom的入口加载函数

3 DOM操作

3.1 获取父元素

3.2 获取下一个同级元素

3.3 尾部追加DOM元素

3.4 头部插入DOM元素

3.5 生成DOM元素

3.6 删除DOM元素

3.7 清空子元素

3.8 检查是否有子元素

3.9 克隆元素

4 事件的监听

4.1 事件的触发

5 各种方法

5.1 attr方法

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

5.1.2 DOM提供getAttribute和setAttribute方法读写元素属性

5.1.3 DOM还允许直接读取属性值,写法要简洁许多

5.2 addClass方法

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

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

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

5.3 CSS

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

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

5.4 数据储存

5.4.1 jQuery对象可以储存数据

5.4.2 HTML 5有一个dataset对象

5.5 Ajax

5.5.1 jQuery的ajax方法,用于异步操作

5.6 动画


1 概述

jQuery是最流行的JavaScript工具库。据统计,目前全世界57.3%的网站使用它。也就是说,10个网站里面,有6个使用jQuery。如果只考察使用工具库的网站,这个比例就会上升到惊人的91.7%。

jQuery如此受欢迎,以至于有被滥用的趋势。许多开发者不管什么样的项目,都一股脑使用jQuery。但是,jQuery本质只是一个中间层,提供一套统一易用的DOM操作接口,消除浏览器之间的差异。多了这一层中间层,操作的性能和效率多多少少会打一些折扣。

2006年,jQuery诞生的时候,主要是为了解决IE6与标准的不兼容问题。如今的情况已经发生了很大的变化。IE的市场份额不断下降,以ECMAScript为基础的JavaScript标准语法,正得到越来越广泛的支持,不同浏览器对标准的支持越来越好、越来越趋同。开发者直接使用JavaScript标准语法,就能同时在各大浏览器运行,不再需要通过jQuery获取兼容性。

另一方面,jQuery臃肿的体积也让人头痛不已。jQuery 2.0的原始大小为235KB,优化后为81KB;如果是支持IE6、7、8的jQuery 1.8.3,原始大小为261KB,优化后为91KB。即使有CDN,浏览器加载这样大小的脚本,也会产生不小的开销。

所以,对于一些不需要支持老式浏览器的小型项目来说,不使用jQuery,直接使用DOM原生接口,可能是更好的选择。开发者有必要了解,jQuery的一些常用操作所对应的DOM写法。而且,理解jQuery背后的原理,会帮助你更好地使用jQuery。要知道有一种极端的说法是,如果你不理解一样东西,就不要使用它。

2 选取DOM元素

jQuery的核心是通过各种选择器,选中DOM元素,可以用querySelectorAll方法模拟这个功能。

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

这里需要注意的是,querySelectorAll方法返回的是NodeList对象,它很像数组(有数字索引和length属性),但不是数组,不能使用pop、push等数组特有方法。如果有需要,可以考虑将Nodelist对象转为数组。

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

2.1 dom和jQuery对象转换

//dom转化为jQuery,只需把dom放进jQuery的对象就可以了$()
$(document);//就是一个jQuery对象
//jQuery转化为dom对象,只需把这个维数组里面的元素取出来即可
$(document)[0]或者$(document).get(0)

2.2 dom和jQuery的入口函数的区别

2.2.1 jQuery的入口加载函数

$(function(){//注意这个入口加载函数会只会等待页面文档加载完成,而不会等待外部资源或图片加载完成
});

注意这个入口加载函数会只会等待页面文档加载完成,而不会等待外部资源或图片加载完成 

2.2.2 dom的入口加载函数

window.onload=function(){//这个函数会等待一切资源加载完成在执行,比如外部脚本或图片
}

这个函数会等待一切资源加载完成在执行,比如外部脚本或图片

3 DOM操作

DOM本身就具有很丰富的操作方法,可以取代jQuery提供的操作方法。

3.1 获取父元素

// jQuery写法
$("#elementID").parent()// DOM写法
document.getElementById("elementID").parentNode

3.2 获取下一个同级元素

// jQuery写法
$("#elementID").next()// DOM写法
document.getElementById("elementID").nextSibling

3.3 尾部追加DOM元素

// jQuery写法
$(parent).append($(child));// DOM写法
parent.appendChild(child)

3.4 头部插入DOM元素

// jQuery写法
$(parent).prepend($(child));// DOM写法
parent.insertBefore(child, parent.childNodes[0])

3.5 生成DOM元素

// jQuery写法
$("<p>")// DOM写法
document.createElement("p")

3.6 删除DOM元素

// jQuery写法
$(child).remove()// DOM写法
child.parentNode.removeChild(child)

3.7 清空子元素

// jQuery写法
$("#elementID").empty()// DOM写法
var element = document.getElementById("elementID");
while(element.firstChild) element.removeChild(element.firstChild);

3.8 检查是否有子元素

// jQuery写法
if (!$("#elementID").is(":empty")){}// DOM写法
if (document.getElementById("elementID").hasChildNodes()){}

3.9 克隆元素

// jQuery写法
$("#elementID").clone()// DOM写法
document.getElementById("elementID").cloned(true)

4 事件的监听

jQuery使用on方法,监听事件和绑定回调函数。

$('button').on('click', function(){ajax( ... );
});

完全可以自己定义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;};

取消事件绑定的off方法,也可以自己定义。

Element.prototype.off = Element.prototype.removeEventListener;

4.1 事件的触发

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

5 各种方法

5.1 attr方法

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

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

5.1.2 DOM提供getAttribute和setAttribute方法读写元素属性

imgElement.setAttribute("src", "http://url/to/image")

5.1.3 DOM还允许直接读取属性值,写法要简洁许多

imgElement.src = "http://url/to/image";

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

5.2 addClass方法

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

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

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

document.body.className = 'hasJS';// ordocument.body.className += ' hasJS';

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

5.3 CSS

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

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

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

element.style.color = "red”;;// orelement.style.cssText += 'color:red';

5.4 数据储存

5.4.1 jQuery对象可以储存数据

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

5.4.2 HTML 5有一个dataset对象

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

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

5.5 Ajax

5.5.1 jQuery的ajax方法,用于异步操作

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

我们自定义一个ajax函数,简单模拟jQuery的ajax方法。

function ajax(url, opts){var xhr = new XMLHttpRequest();xhr.onreadystatechange = function(){var completed = 4;if(xhr.readyState === completed){if(xhr.status === 200){opts.success(xhr.responseText, xhr);}else{opts.error(xhr.responseText, xhr);}}};xhr.open(opts.method, url, true);xhr.send(opts.data);
}

使用的时候,除了网址,还需要传入一个自己构造的option对象。

ajax('/foo', { method: 'GET',success: function(response){console.log(response);},error: function(response){console.log(response);}
});

5.6 动画

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与DOM的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084986

相关文章

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F