jQuery在项目中的应用
版权声明:本文为博主原创文章,未经博主允许不得转载。(转载需注明出处 http://www.cnblogs.com/yanfei1819/p/7743661.html)
【摘要】
最近在项目中应用到了jQuery,对于jQuery的强大的选择器,出色的DOM操作的封装,可靠的事件处理机制、完善的Ajax交互,优雅的链式操作方式等等方面的优点有了很大的体会,本文将就这些方面进行展开。
【关键词】
javaScript,jquery
【引言】
jQuery是继Prototype之后又一个优秀的轻量级的JavaScript库,它拥有强大的选择器,出色的DOM操作的封装,可靠的事件处理机制、出色的浏览器兼容性,完善的Ajax交互,不污染顶级变量,优雅的链式操作方式等等,
这些优点吸引了一批批JavaScript开发者去学习和研究它。正文将就jQuery的这几个特点详细说明。
【正文】
1.强大的选择器,可以便捷的访问页面的任意部分
jQuery最有特色的语法特点就是与CSS语法相似的选择器,它可以让操作者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。
CSS语法类似的选择器,如
- 元素选择器($(“body”))
- 分组选择器($(“div,span”))
- 类选择器($(“.classNameA”))
- ID选择器($(“#deviceId”))
- 属性选择器($("input[name^='news']"), $("input[name~=man]"))
- 后代选择器($("form input"))
- 子元素选择器($("ul.topnav > li"))
- 相邻兄弟选择器($("label + input"))
- 一般兄弟选择器($("label ~ input"))
- 伪类选择器($(“input: focus”))等。
表单元素选择器,常用的表单元素可以很方便的定位,比如:
- 按钮$(":button")
- 复选框$(':checkbox')
- 文件$(":file")
- 标题$(":header")
- 图像$(":image")
- 密码$(":password")
- 单选框$(":radio")
- 重置$(":reset")
- 提交$(":submit")
- 文本$(":text")等
索引选择器,
- 同类型元素多个存在时,可以用索引来定义元素位置。
如找类ui-dialog-buttonpane下面的第一个按钮,
$('.ui-dialog-buttonpane').find('button:eq(0)')
2.出色的DOM操作的封装
jQuery封装了大量常用DOM操作,使你编写DOM操作相关程序的时候能够得心应手,优雅的完成各种原本非常复杂的操作,让JavaScript新手也能写出出色的程序。
2.1.节点操作
- 创建并追加节点,如在某元素之前插入一个表格
$("<table width='100%'><tr><td></td></tr></table>").insertBefore(div);
- 删除节点,如删除页面的第一排按钮
target.find(".page-title-button-area:eq(0)").remove();
- 复制节点,如将父窗口的元素复制一下添加到某元素内
$(“#id”).append($(window.parent.document).find(“#id”).clone());
- 替换节点,如将元素用户新的数据替换
$(“#id”).replaceWith($data.find(“#id”));
- 包裹节点,如在某元素外包一层div
sideBar.find(".sidebar-desc").wrap("<div class=sidebar-middle></div>");
2.2.属性操作
- 获取属性,如获取某按钮可用否
$("button").attr("disabled ");
- 设置属性,如将某按钮设为不可用状态
$("button").attr("disabled","disabled");
- 删除属性,如删除某按钮不可用状态
$("button").removeAttr("disabled");
2.3.样式操作
- 添加删除样式,如
$(".ui-dialog-titlebar").removeClass("fxWarnTitleDiv").addClass("ui-widget-header");
- 判断是否存在某样式
$(obj).hasClass("sidebar-title");
2.4.内容操作
- html() 获取或设置元素的html内容,如将返回的数据填入到某元素
$('#main-container').html($data);
- siblings() 获取元素前后紧邻的同辈节点,如检查元素是否存在同辈节点
if($('#main-container'). siblings ().length > 0){}
2.5.css-dom技术
例如
修改某个按钮的鼠标样式
$("button").css("cursor","default");
3.可靠的事件处理机制
jQuery的事件处理机制吸取了JavaScript专家Dean Edwards编写的事件处理函数的精华,使得jQuery处理事件绑定的时候相当的可靠。在预留退路方面,jQuery也做的非常不错.
3.1..trigger事件触发
如有两个一样的下拉框,希望下拉框1点击的同时,下拉框2能够同步,那么就用trigger进行触发下拉框2的事件。
$(“#sel1”).bind('change',function(e){
$(“#sel2”).val($(e.target).val());
$(“#sel2”).trigger('change');
});
3.2.live事件绑定
如有一个按钮,它点击时会生成另外一个同样的按钮,新生成的按钮需要添加事件,但是每生成一个按钮就多一个添加事件的动作,比较麻烦,此时用live比较省事。
$(“button”).live('click',function(e){
…
});
这样,只要是按钮,不管是已经生成的,还是没有生成的,它都会添加一个上面的事件。
3.3. toggle点击切换事件
有一个按钮,希望点击奇数次弹出1,点击偶数次弹出2,就用toggle:
target.toggle(function() {
alert("1");
}, function() {
alert("2");
});
4.完善的Ajax交互
jQuery将所有的Ajax操作封装到一个函数$.ajax里,使得我们处理Ajax的时候能够专心处理业务逻辑而无需关心复杂的浏览器兼容性和XMLHttpRequest对象的创建和使用的问题.
使用Ajax实现局部刷新,如点击一个按钮,希望重新加载页面标题
$.ajax({
type: 'POST',
url: url,
data: submitData,
dataType: "html",
success: function (data) {
$(“.page-title”). replaceWith($(data).find(“.page-title”));
}
});
还可用通过指定 beforeSend、error、success 或者 complete 等回调函数,向用户提供更多有关 Ajax 体验的反馈。
5.优雅的链式操作方式
jQuery强大的链式操作,简单说就是允许将所有操作连接在一起,以链条的形式写出来,这是jQuery最令人称道、最方便的特点。它的原理在于每一步的jQuery操作,返回的都是一个jQuery对象,所以不同操作可以连在一起。
$("has_children").click(function(){
$(this).addClass("highlight").children("a").show().end().siblings().removeClass("highlight").children("a").hide();
});
jQuery还提供了.end()方法,使得结果集可以后退一步:
$('div').find('h3').eq(2).html('Hello')
.end() //退回到选中所有的h3元素的那一步
.eq(0).html('World');
6.易扩展性
在用户可视化组件上,jquery提供了官方的插件:jqueryUI。同时jQuery的易扩展性,吸引了来自全球的开发者来共同编写jQuery的扩展插件。我们可以自己开发一些易用,高效率的组件来扩展jquery的适用范围。
6.1、自己开发一个插件
例如
// 定义插件
(function($){
$.fn.hoverClass = function(c) {
return this.hover(
function() { $(this).toggleClass(c); }
);
};
})(jQuery);
// 使用插件
$(‘li’).hoverClass(‘hover’);
6.2、jQuery的插件其实就是$.fn上增加的函数, 那这个fn是什么呢?
看这段源码
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {…}
}
显然, $.fn其实就是jQuery.prototype的简写.
6.3、对于比较复杂的插件开发
jQuery UI提供了一个widget工厂机制
$.widget(“ui.dialog”, {
options: {
autoOpen: true,…
},
_create: function(){ … },
_init: function() {
if ( this.options.autoOpen ) {
this.open();
}
},
_setOption: function(key, value){ … }
destroy: function(){ … }
});
我们可以利用其使得插件的开发更加便捷。
【总结】
以上几点是在项目中使用Jquery的体会,它不只是让我们在Web开发中基于JavaScript库的应用程序可以获得更好的浏览器兼容性和开发效率,同时可以提高更多的功能和效果,增强应用程序的功能和性能,
改善用户体验,改变了编写程序的设计方式和思路,并且它的设计思想我们可以借鉴到其他的软件开发中去。
【参考文献】
1、浅谈JavaScript库——jQuery_ExtJs的对比研究.pdf
2、http://www.zzbaike.com/wiki/JavaScript库
jQuery在项目中的应用的更多相关文章
- Jquery在项目中的总结
1.构造对象 var _getSearchArg = function () { var argModel = {}; argModel.Txt = value; argModel.Code = va ...
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法 这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常 ...
- 关于Eclipse项目中加入jquery.js文件报错(missing semicolon)问题
在使用Eclipse3.7及以后的版本的时候,加入jQuery文件会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大大的影响到开发人员 ...
- 九、VueJs 填坑日记之在项目中使用jQuery
很多人学习 js 都是从 jQuery 开始的,我也不例外.有时候进行一些操作的时候,还是感觉 jQuery 比较好用,那么,我们如何在项目中使用 jQuery 呢?这篇博文带你实践. 引用 jQue ...
- 记录下项目中常用到的JavaScript/JQuery代码二(大量实例)
记录下项目中常用到的JavaScript/JQuery代码一(大量实例) 1.input输入框监听变化 <input type="text" style="widt ...
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- 在vue项目中引入jquery
在vue项目中引入jquerycnpm install jquery --save在main.js中引入,加入下面这行代码:import 'jquery'注:有些项目是按需加载的,在main.js里面 ...
- 如何在Vue项目中引入jQuery?
假设你的项目由vue-cli初始化 (e.g. vue init webpack my-project). 在你的vue项目目录下执行: npm install jquery --save-dev 打 ...
- 在进行vue的学习,项目中需要引入bootstrap、jquery的步骤。
在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...
随机推荐
- 201521123026 《java程序设计》 第九周学习总结
1. 本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) PTA提交结果: 运行结果截图: 1.2 ...
- Markdown编辑后
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...
- 初识ELF格式 ABI,EABI,OABI
尽管每天都在调用linux的elf文件做各种事,但却很少去了解他,最近尝试在orangepi上编译个elf到android手机上运行,因为两个CPU都是ARMv8的.结果运行失败了.遂查找原因.结果挖 ...
- ASP.NET Core 运行原理剖析
1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...
- 字符、字符集、编码,以及它们python中会遇到的一些问题(下)
在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇, ...
- QT4.8.5 连接数据库(读写数据)
#include "mainwindow.h" #include <QApplication> #include <QLabel> #include < ...
- JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7、8性能对比)
转载请注明原创出处,谢谢! 因为每个链路都会对其性能造成影响,应该是全链路的修改压测(ak大神经常说全链路!).本次基本就是局域网,所以并没有怎么优化,其实也应该考虑进去的. Linux系统参数层面的 ...
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
- C语言编译过程及数据类型
写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...
- 第4章 同步控制 Synchronization ----信号量(Semaphore)
许多文件中都会提到 semaphores(信号量),因为在电脑科学中它是最具历史的同步机制.它可以让你陷入理论的泥淖之中,教授们则喜欢问你一些有关于信号量的疑难杂 症.你可能不容易找到一些关于 sem ...