读《犀利开发jQuery内核详解与实践》(1)

jQuery简介

  • jQuery设计宗旨是“Write Less,Do More”,就是说用更少的代码,做更多的事情。
  • jQuery项目主要由 jQuery Core(核心库)jQuery UI(界面库)Sizzle(CSS选择器)QUnit(测试套件) 四部分组成。
  • jQuery的特性:
    • jQuery为频繁的DOM操作,针对浏览器兼容性提供了解决方案,并封装了更为简约的API;
    • 支持链式操作,让JS代码书写更优雅;
    • jQuery将与之相关的方法和属性,都封装在jQuery对象中,避免造成全局变量污染;
    • 最后不得不提的是jQuery的扩展,即便现在angularJS、vueJS横行的年代,很多时候也不得不借助丰富的jQuery插件;
  • jQuery相关网址:

jQuery HelloWorld

<!DOCTYPE html>
<html>
    <head>
       <meta charset="UTF-8">
       <title>jq hello</title>
    </head>
    <body>
        <!-- 导入jQuery库 -->
        <script src="https://cdn.bootcss.com/jquery/2.2.0/jquery.min.js"></script>
        <script type="text/javascript">
            $(function(){
               console.log('jquery is ready!'); 
            });
        </script>
    </body>
</html>
  • $是jQuery的别名,$()等同于jQuery()
  • 由于jQuery无可避免需要操作DOM文档,所以应该在DOM载入之后再执行jQuery代码。换句话说,所有jQuery相关操作应该再DOM ready事件触发后才进行。
//匹配到document节点后,绑定ready事件(也可简写成以上helloworld的方式)
$(document).ready(function(){
    //jQuery do something
});

jQuery对象和DOM对象

  • 很多初学者会在打开一个js文件后,困惑这究竟是JavaScript原生代码还是jQuery代码。是由于没区分JavaScript DOM API和jQuery API的差异,那什么是jQuery对象,什么是DOM对象呢?
区别
  • DOM(Document Object Model)文档对象模型主要依赖原生JavaScript暴露的接口来访问和操作。比如getElementByTagName()getElementById()等内置的方法。而jQuery对象是对DOM对象进行一层包装,更准确的说,jQuery对象将一个或多个DOM对象封装后产生一个新对象
  • 由于jQuery对象和DOM对象存在差异,所以直接用jQuery对象调用DOM对象的方法是错误的,反之亦然。
jQuery对象转DOM对象
  • 上面提到,jQuery对象是包含一个或多个DOM对象的类数组对象。所以直接通过数组下标从jQuery对象获取DOM对象:
//实际上jQuery validate表单验证插件的源码也是这么写的
var li = $li[0];
  • 除此之外,还可以通过jQuery对象提供的get方法来获取:
var li = $li.get(0);
DOM对象转jQuery对象
  • 相对来说,DOM对象转成jQuery对象就比较简单了,直接调用jQquery的构造函数即可:
//可以传递单个或多个DOM对象
var li = document.getElementByTagName('li');
var $li = $(li);

jQuery ready()和JavaScript load()事件比较

HTML文档的加载顺序:
  1. 解析HTML结构
  2. 加载外部javascript脚本和css样式文件
  3. 解析并执行javascript脚本
  4. 构造HTML DOM模型
  5. 加载外部图片等外部文件
  6. 页面加载完毕
  • jQuery.ready()事件是DOM结构绘制完毕就触发,而原生的load()事件要等待所有资源准备好之后才触发。换句话说,如果页面需要加载大量的外部文件时,需要等待很长时间才执行load()方法,而jQuery.ready()则不需等待所有资源加载完毕。
  • 另外,jQuery.ready()事件可以定义多次。

jquery构造函数

  • jQuery把所有的操作都封装在一个jQuery构造函数中,形成了统一的操作入口,简化了操作门槛。jQuery构造函数主要的调用方式有如下四种:
/***
 *
 * 方式一:jQuery(expression)
 * 参数传入一个表达式的字符串,通过表达式匹配文档的元素,最终会把找到的元素封装成jQuery对象返回。
 */
jQuery('#testDiv');


/***
 *
 * 方式二:jQuery(html)
 * 参数传入HTML字符串,jQuery将创建一个对应结构的DOM节点的jQuery对象
 */
jQuery('<input type="text">');


/***
 *
 * 方式三:jQuery(elements)
 * 参数传入一个或多个DOM元素,jQuery将其封装成jQuery对象并返回
 */
jQuery('li').css('backgroud-color','#FFF');


/***
 *
 * 方式四:jQuery(fn)
 * 传入一个函数,其等价于`$(document).ready()`处理函数
 */
$(function(){
    $('ul').css('color','red');
});

jQuery链式语法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>jquery 链式操作</title>
        <style type="text/css">
            .txt{
                display: block;
            }
        </style>
    </head>
    <body>
        <span class="txt">我是一段文本内容</span>
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
        <script type="text/javascript">
            $(function(){
                //创建四个按钮
                $('<input type="button" value="click me">'+
                  '<input type="button" value="triggle click">'+
                  '<input type="button" value="detach handler">'+
                  '<input type="button" value="show/hide text">').appendTo($('body'));
                //为第一个按钮绑定click事件
                $('input[type="button"]').eq(0).click(function(){
                    alert('click me!');
                //为第二个按钮绑定click事件,触发第一个按钮的点击
                }).end().eq(1).click(function(){
                    $('input[type="button"]:eq(0)').trigger('click');
                //为第三个按钮绑定click事件,解除第一个按钮的点击事件
                }).end().eq(2).click(function(){
                    $('input[type="button"]:eq(0)').unbind('click');
                //为第四个按钮绑定toggle事件,隐藏或显示文本内容
                }).end().eq(3).click(function(){
                    $('.txt').toggle('slow');
                });
            });
        </script>
    </body>
</html>
  • jQuery提供了end()eq()filter()等方法来进行链式操作。但为了代码的可阅读性,建议同一行调用的方法不超过3个,如果代码过长可考虑换行或者缩进。

jQuery选择器

  • 不可否认,强大的选择器也是jQuery能成为最流行的js框架的原因之一。试想如果jQuery的选择器仍像原生JSgetElementById()那么孱弱,你会在项目中使用jQuery吗?
  • jQuery选择器,实际上就是一个表示特殊语义的字符串,它支持id、tagName、css1~3和xpath表达式。然后调用jquery构造函数将该字符串传入,就能选择DOM对象,封装成jQuery对象。
jquery选择器的过滤和选择
  • jQuery过滤器按照功能主要分为 选择筛选
    1. 过滤作用的选择器是从指定条件匹配到的元素中,通过冒号:来筛选元素,默认情况下,是从所有元素*中进行过滤。
    $(':[title]');//等价于 $('*:[title]')
    
    1. 选择功能的选择器则不会有默认的范围。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,380评论 0 44
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,643评论 18 503
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    程序员poetry阅读 114,352评论 24 450
  • 定义 使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果 相关重要概念 屏幕尺寸 含义:手...
    lewic阅读 646评论 0 0
  • 张张伞同色,霖霖露空蓑。 育林飞鸟无,傻我笑太多。 平平平仄仄,仄仄仄平平。 仄仄平平仄,平平仄仄平。
    叔于田阅读 178评论 0 1