所经历的 JS 框架使用及迁移(一)
由于 Prototype 的出现,比 jQuery 早,早期网站使用了 JS 框架 Prototype,后来由于一些快速开发的需要,同时启用了 jQuery ,jQuery 的简洁灵活,功能强大,让人爱不释手。因此在代码中,就有了两份代码并存。再到现在,由于前端缩身、效率等的需要,需要将 Prototype 移除,所以就开始了一个比较繁琐的迁移过程。所幸的是,Prototype 的依赖还不是特别的深。
Prototype 和 jQuery 都作为优秀的 javascript 框架,在实现的内容上,核心库本身,都封装了 Ajax 操作、抽象了浏览器兼容问题、DOM 操作,方便地使用 CSS 选择器功能、事件处理等,并无太多不同。重要的区别在于实现的形式和由此带来的使用方式上。Prototype 的重点是面向对象,扩展了 javascript 本身,为功能更加强大而开发。jQuery 则专为方便使用、本身高效而开发,全闭包、链式操作、隐式迭代,强大的事件绑定,短小精悍。从业界来说,jQuery 的使用占据了4成以上的份额。
下面来看 Prototype 到 jQuery 的迁移所做的工作。
由于需要将 Prototype 与 jQuery 并存,所以 $ 由 Prototype 所使用,而 jQuery 的 $ 被重新赋值为:$j。
var $j=jQuery.noConflict();
将 JS 代码从 Prototype 向 jQuery 迁移主要有如下操作:
A、DOM 操作部分
取元素:
Prototype:
$ 的用法是 $("id") 或者是 $(htmlelement), CSS 选择器 用 $$,并且返回数组。
相对应的,在 jQuery 中
$j 的用法是 $j("#id") 或者是 $j(htmlelement),另外 $j 就同时支持 css 选择器。
这个要注意的地方,在于 Prototype 在取 id 成功之后,返回的是 HTML 元素对象。而 jQuery 返回的是 jQuery 对象,在 Firebug 中 console.log 出来之后象数组,所以如果要改变对象的属性,比如 innerHTML,可以用 jQuery 提供的 html()方法,而不能用 innerHTML,要想取得 HTML 元素对象,得用 get(0) 去取,如:
$j("#id").get(0) 跟 Prototype 的 $("id") 效果一样。
$j("#id").html() 和 $j("#id").get(0).innerHTML 效果一样。 如果用 $j("#id").innerHTML ,只是凭空为 jQuery 对象增加了一个属性。
由此,也带来迁移中一个容易出错的地方。
看如下两段代码:
Prototype 版:
var no = $("no");
console.log(no);
if(!no)
{
console.log("no not exists!");
}
jQuery 版:
var no = $j("#no");
console.log(no);
if(!no || no.length == 0)
{
console.log("no not exists!");
}
由于返回值的不同,对元素是否存的检测也是不同的。
下面是在chrome 控制台上的测试输出。
Prototype 版:
var no = $("no");
undefined
console.log(!no);
true
undefined
jQuery 版:
var no = $j("#no");
undefined
console.log(!no);
false
undefined
分享到:
相关推荐
ABP框架的目标之一是加速开发过程,通过提供一系列现成的工具和服务简化常见的开发任务,使开发者能够专注于业务逻辑而非繁琐的基础架构搭建。 **2. 遵循DDD原则** ABP框架遵循领域驱动设计(Domain-Driven Design...
Querious Migration是一个基于JavaScript的数据库迁移框架,主要用于管理和执行数据库结构的变化,以保持数据库的一致性和可维护性。在软件开发过程中,随着项目需求的不断变化,数据库的结构也可能会经历一系列的...
Vue.js是一个流行的前端JavaScript框架,自2021年起其发展生态经历了重大的更新和扩张。标题“VueConf CN 2021.pdf”暗示了这一年中国社区围绕Vue.js所举办的大会,而描述“2021vue发展生态”直接指向了2021年度Vue....
使用Webpacker时,我们可以创建一个entry point,如 `app/javascript/packs/application.js`,并在此处导入所需的模块。例如: ```javascript import 'bootstrap/dist/js/bootstrap'; import './controllers'; ...
"ShoppingListApp:ShoppingListApp 存储库从 googlecode 迁移" 这个标题表明这是一个关于名为 "ShoppingListApp" 的应用程序的代码存储库,它最近经历了从 Google Code 平台到另一个平台的迁移。Google Code 是一个...
综上所述,《Tango with Django 1.9》是一本为Python和Django初学者量身打造的入门指南,它不仅仅是教会读者如何使用Django框架,还融入了实际的项目开发经验,指导读者如何在实际开发中应用所学知识。同时,这本书...
Ember.js是一个流行的JavaScript框架,用于构建Web应用。在Ember的发展过程中,其架构经历了多次改进,其中之一就是从传统的Classic模式向Pod结构的转变。Pods是Ember的一个设计模式,旨在提高代码组织和可维护性。...
移动互联网时代的前端开发正经历着迅猛的发展,其中,小程序成为推动这一发展的关键力量。为了应对小程序研发中的挑战,mpvue应运而生,它不仅将Vue.js的优势带到了小程序开发领域,还致力于提高开发效率和代码复用...
Vue.js是近年来备受推崇的轻量级前端JavaScript框架,它以其响应式数据绑定、组件化开发和易于上手的特点,为开发者提供了高效构建用户界面的工具。 首先,Vue.js的核心概念包括虚拟DOM、指令系统和组件化。虚拟DOM...
**正文** 标题提到的"Jsguangjia"很可能是一个基于AngularJS...同时,随着技术的发展,AngularJS也经历了多个版本的更新,如AngularJS 1.x和Angular 2+(不再使用JS后缀),了解它们之间的差异和迁移策略也是必要的。
后端则将BaaS服务替换为阿里云的IaaS服务,如MySQL、OSS、缓存和搜索服务,同时Web层仍使用Node.js和Egg框架,业务层则借鉴Rails实践,形成了大型单体应用,引入ORM以提升代码组织和数据处理。 【对外商业化阶段】...
标题中的“毕业设计+Python基于Django网络健身俱乐部网站设计+Pycharm+Django2.0 + sqlite”表明这是一个使用Python编程语言,基于Django框架开发的网络健身俱乐部网站项目。这个项目可能作为学生的毕业设计作品,...
4. **ABP框架**:在项目中使用ABP(ASP.NET Boilerplate)框架,这是一个开源的.NET平台,提供了基础架构,如身份验证、权限管理、审计日志等,用于快速开发企业级应用。 5. **数据库管理**:他有SQL Server的使用...
标题“cardboard_project”指的是一个基于Rails框架的项目,它可能是由一个团队开发的,用于构建某种Web应用程序或服务。Rails是Ruby编程语言的一个流行框架,以其MVC(模型-视图-控制器)架构和“约定优于配置”的...
5. 前端界面:使用HTML、CSS、JavaScript和前端框架(如Vue.js、React)构建用户友好的交互界面。 四、系统实施步骤 1. 需求分析:明确业务需求,识别关键功能。 2. 系统设计:架构设计、数据库设计、接口设计等。 ...
AngularJS是一个JavaScript框架,用于构建Web应用程序。ng-options是AngularJS的一个指令,用于在select元素中提供一个选项列表。加上index可以帮助用户更好地管理选项列表,例如,当列表项改变时,可以关联额外的...
8. **框架使用**: 使用Zend Framework和Smarty等开发工具,意味着他对PHP框架有了解,能够利用这些工具提高开发效率和代码质量。 9. **软件生命周期**: 从简历中可以看出,应聘者经历了从项目启动到后期维护的整个...
我们认为,发展必须是一种令人愉快的,富有创造力的经历,才能真正实现。 Laravel减轻了许多Web项目中使用的常见任务,从而减轻了开发过程中的痛苦,例如:。。用于和存储的多个后端。富有表现力,直观的 。数据库不...
- **迁移指南**:手册中还提供了一部分关于如何从纯 JavaScript 迁移到 TypeScript 的指导,这对于已经有大量 JavaScript 代码库的项目来说非常重要。 #### 三、新增功能 - **版本演进**:手册详细记录了 ...