版权声明:本文为博主原创文章,未经博主允许不得转载。(转载需注明出处 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在项目中的应用的更多相关文章

  1. Jquery在项目中的总结

    1.构造对象 var _getSearchArg = function () { var argModel = {}; argModel.Txt = value; argModel.Code = va ...

  2. 转 mvc项目中,解决引用jquery文件后智能提示失效的办法

    mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法   这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常 ...

  3. 关于Eclipse项目中加入jquery.js文件报错(missing semicolon)问题

    在使用Eclipse3.7及以后的版本的时候,加入jQuery文件会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大大的影响到开发人员 ...

  4. 九、VueJs 填坑日记之在项目中使用jQuery

    很多人学习 js 都是从 jQuery 开始的,我也不例外.有时候进行一些操作的时候,还是感觉 jQuery 比较好用,那么,我们如何在项目中使用 jQuery 呢?这篇博文带你实践. 引用 jQue ...

  5. 记录下项目中常用到的JavaScript/JQuery代码二(大量实例)

    记录下项目中常用到的JavaScript/JQuery代码一(大量实例) 1.input输入框监听变化 <input type="text" style="widt ...

  6. 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!

    擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...

  7. 在vue项目中引入jquery

    在vue项目中引入jquerycnpm install jquery --save在main.js中引入,加入下面这行代码:import 'jquery'注:有些项目是按需加载的,在main.js里面 ...

  8. 如何在Vue项目中引入jQuery?

    假设你的项目由vue-cli初始化 (e.g. vue init webpack my-project). 在你的vue项目目录下执行: npm install jquery --save-dev 打 ...

  9. 在进行vue的学习,项目中需要引入bootstrap、jquery的步骤。

    在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...

随机推荐

  1. 201521123026 《java程序设计》 第九周学习总结

    1. 本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) PTA提交结果: 运行结果截图: 1.2 ...

  2. Markdown编辑后

    一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...

  3. 初识ELF格式 ABI,EABI,OABI

    尽管每天都在调用linux的elf文件做各种事,但却很少去了解他,最近尝试在orangepi上编译个elf到android手机上运行,因为两个CPU都是ARMv8的.结果运行失败了.遂查找原因.结果挖 ...

  4. ASP.NET Core 运行原理剖析

    1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...

  5. 字符、字符集、编码,以及它们python中会遇到的一些问题(下)

    在看了很多的博客文章之后,总结整理得到了以下文章,非常感谢这些无私奉献的博主! 文章末尾有本文引用的文章的链接,如果有漏掉的文章引用,可以发邮件联系我,随后再次附上链接! 侵删!!! 这一部分是下篇, ...

  6. QT4.8.5 连接数据库(读写数据)

    #include "mainwindow.h" #include <QApplication> #include <QLabel> #include < ...

  7. JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7、8性能对比)

    转载请注明原创出处,谢谢! 因为每个链路都会对其性能造成影响,应该是全链路的修改压测(ak大神经常说全链路!).本次基本就是局域网,所以并没有怎么优化,其实也应该考虑进去的. Linux系统参数层面的 ...

  8. 【Python学习笔记之二】浅谈Python的yield用法

    在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...

  9. C语言编译过程及数据类型

    写在前面 C语言可以称得上是高级语言中的低级语言,接下来一段时间,我会写一下文章关于c语言,把它的神秘面纱一 一揭开.下面主要是c语言的C语言编译过程及数据类型 源文件编译过程 为了使计算机能执行高级 ...

  10. 第4章 同步控制 Synchronization ----信号量(Semaphore)

    许多文件中都会提到 semaphores(信号量),因为在电脑科学中它是最具历史的同步机制.它可以让你陷入理论的泥淖之中,教授们则喜欢问你一些有关于信号量的疑难杂 症.你可能不容易找到一些关于 sem ...