前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jQuery介绍与常见选择器的使用

jQuery介绍与常见选择器的使用

作者头像
端碗吹水
发布2020-09-23 12:23:01
2.6K0
发布2020-09-23 12:23:01
举报

jQuery简介

jQuery是继Prototype之后又一个优秀的JavaScript库,是一个由John Resig创建与2006年1月的开源项目。现在的jQuery团队主要包括核心库、UI、插件和jQuery Mobile 等开发人员以及推广和网站设计、维护人员。

jQuery凭借简洁的语法和跨平台的兼容性,极大地简化了JavaScript开发人员遍历HTML文档、操作DOM树、处理事件、执行动画和开发AJAX的操作。其独特而优雅的代码风格改变了JavaScript程序员的设计思路和编写程序的方式。总之,无论是网页设计师、后台开发者、业务爱好者还是项目管理者,也无论是JavaScript初学者还是JavaScript高手,都有足够多的理由去学习jQuery。

jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。

jQuery优势

jQuery强调的理念是写得少,做得多(write less,do more)。jQuery独特的选择器、链式操作、事件处理机制和封装完善的AJAX都是其他JavaScript库望尘莫及的。概括起来,jQuery有以下优势:

1.轻量级(那些说jQuery臃肿的,自己定制库的大神就当我没说)。相对于其他库来说jQuery非常轻巧,采用UglifyJS压缩后,目前最新版压缩后大小在85KB左右(随着版本的不同这个数字可能不一样)。

(题外话:为了使jQuery变得轻巧,jQuery一直在寻求最好的压缩工具,所以jQuery的压缩工具也一直在变化,从最早采用Dean Edward编写的Packer,到后来使用Google Compiler进行压缩,最后到目前使用UglifyJS进行压缩。)

2.强大的选择器。jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。另外还可以加入插件使其支持XPath选择器,甚至开发者可以编写属于自己的选择器。由于jQuery支持选择器这一特性,因此有一定CSS经验的开发人员可以很容易的切入到jQuery的学习中来。

3.出色的DOM操作的封装。jQuery封装了大量常用的DOM操作,使开发者在编写DOM操作相关程序的时候能够得心应手。通过jQuery可以轻松地完成各种原本非常复杂的操作,让 JavaScript 新手也能写出出色的程序。

4.可靠的事件处理机制。jQuery的事件处理机制吸收了JavaScript专家Dean Edward编写的事件处理函数的精华,使得jQuery在处理事件绑定的时候相当可靠。在预留退路(graceful degradation)、循序渐进以及非***式(Unobtrusive)编程思想方面,jQuery也做得非常不错。

5.完善的AJAX。jQuery将所有的AJAX操作封装到一个函数$.ajax()里,使得开发者处理AJAX的时候能够专心处理业务逻辑而无需关心复杂的浏览器兼容性和XMLHttpRequest对象的创建和使用的问题。

6.不污染顶级变量。jQuery只建立一个名为jQuery的对象,其所有的函数方法都在这个对象之下。其别名$也可以随时交出控制权,绝对不会污染其他的对象。该特性使jQuery可以与其他JavaScript库共存,在项目中放心的引用而不需要考虑到后期可能的冲突。

7.出色的浏览器兼容性。作为一个流行的JavaScript库,浏览器的兼容性是必须具备的条件之一。jQuery能够在IE6.0+、FF3.6+、Safari5.0+、Opera和Chrome等浏览器下正常运行。jQuery同时修复了一些浏览器之间的差异,使开发者不必在开展项目前建立浏览器兼容库。

8.链式操作方式。jQuery中最具有特色的莫过于它的链式操作方式——即对发生在同一个jQuery对象上的一组动作,可以直接连写而无需重复获取对象。这一特点是jQuery的代码无比优雅。

9.隐式迭代。当用jQuery找到带有“.myClass”类的全部元素,然后隐藏它们时,无需循环遍历每一个返回的元素。相反,jQuery里的方法都被设计成自动操作对象集合,而不是单独的对象,这使得大量的循环结构变得不再必要,从而大幅减少代码量。

10.行为层与结构层的分离。开发者可以使用jQuery选择器选中元素,然后直接给元素添加事件。这种将行为层与结构层完全分离的思想,可以使jQuery开发人员和HTML或其他页面开发人员各司其职,摆脱过去开发冲突或个人单干的开发模式。同时,后期维护也非常方便,不需要再HTML代码中寻找某些函数和重复修复HTML代码。

11.丰富的插件支持。jQuery的易扩展性,吸引了来自全球的开发者来编写jQuery的扩展插件。目前已经有成百上千的官方插件支持,而且还不断有新插件面世。

12.完善的文档。jQuery的文档非常丰富,不管是英文文档还是中文文档。

13.开源。jQuery是一个开源的产品,任何人都可以自由地使用并提出改进意见。

注:以上转自《锋利的jQuery》一书

配置jQuery环境

jQuery的环境配置很简单,只需要到官网下载一个.js文件放到工程里就可以了。 官网下载地址:https://jquery.com/download/

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

图中的Download the compressed, production jQuery 3.2.1是最小化版,代码经过压缩的,一般用于生产环境。 Download the uncompressed, development jQuery 3.2.1则是未压缩版,代码未经过压缩,可供阅读,一般用于开发环境。

下载完成:

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

打开压缩版的jQuery可以发现,除了注释外,代码中几乎没有空格和换行,这附带在生产环境中可以节省资源:

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

未压缩版的jQuery代码是正常的格式,在开发时遇到一些特殊的问题就可以参考源码寻找解决方法:

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

注意:虽然有压缩和未压缩的两种版本,但是两个版本除了在代码压缩之外并没有任何区别,压缩版并没有删减jQuery的功能,未压缩版也没有增加什么功能。

选择一个版本的jQuery,导入工程中,我选择的是min版:

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

然后在HTML文件中引入jQuery:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <body>

    </body>
</html>

使用如下语句测试jQuery是否能够正常使用:

<script>
        function test(){
            alert('Hello jQuery');
        }
        $(document).ready(test());
</script>

使用浏览器访问该页面,弹出如下对话框则代表没问题:

jQuery介绍与常见选择器的使用
jQuery介绍与常见选择器的使用

使用jQuery的选择器

在开始使用jQuery之前,首先应该明确一点,在jQuery库中,\就是jQuery的一个简写形式,例如\("#foo") 等价于 jQuery("#foo"),\.ajax和jQuery.ajax是等价的。如果没有特别的说明,程序中的\符号都是jQuery的一个简写形式。既然是简写形式,那么我们来看看jQuery在源码中是怎么定义的:

    // Define a local copy of jQuery
    jQuery = function( selector, context ) {

        // The jQuery object is actually just the init constructor 'enhanced'
        // Need init if jQuery is called (just allow error to be thrown if not included)
        return new jQuery.fn.init( selector, context );
    },

    //......以下代码省略......

从以上源码可以看到,jQuery是通过函数表达式定义的,所以它是一个函数(function)对象。

知道jQuery是怎么定义的,那么再来看看$这个别名是怎么定义的,顺便再看看jQuery是如何防止变量冲突的,这段代码是jQuery源码的最后一段:

//......以上代码省略......

var

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,

    // Map over the $ in case of overwrite
    _$ = window.$;
    // 以上两个私有变量映射了 window 的 jQuery 和 $ 两个对象,以防止变量被强行覆盖

// 这是防止变量冲突,用来释放变量控制权的一个重要函数,deep是一个可选的布尔参数,用以决定移交 $ 引用的同时是否移交 jQuery 对象本身。一旦 noConflict 方法被调用,则通过 _jQuery, _$, jQuery, $ 四者之间的差异,来决定控制权的移交方式。
jQuery.noConflict = function( deep ) {
    // 默认处理 $ 
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }

    // 当deep设置为 true 的话,_jQuery 覆盖 window.jQuery,此时 $ 和 jQuery 都将失效。
    if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }

    // 无论如何都会返回jQuery对象给jQuery.noConflict
    return jQuery;
};

// Expose jQuery and $ identifiers, even in AMD
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
// noGlobal函数没被调用就把jQuery对象给window中的 jQuery 和 $ 
if ( !noGlobal ) {
    window.jQuery = window.$ = jQuery;
}

return jQuery;
} );

在使用jQuery时,通过$( )来包装、简化操作,这个括号中可以传递选择器的名称,也可以传递DOM对象。传递DOM对象的话,就是直接包装传递过去的DOM对象。传递选择器的名称则包装的是使用这个选择器的DOM对象。不管传递什么,包装后生成的都是jQuery对象,jQuery对象不能调用DOM对象的方法或属性,例如innerHTML、checked等。jQuery对象只能调用自己的方法,例如html、attr等。而且我们得知道,在DOM树中的每一个节点或者说标签,都是一个对象。

以下演示几个常用的选择器: 1.标签选择器。传入标签的名称,就可以控制所有符合该名称的标签,示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <body>
        <p></p>
        <p></p>
        <p></p>
        <p></p>
        <p></p>
    </body>
    <script>
        $("p").html('hello');  // 给所有的p标签都写入hello
    </script>
</html>

运行结果:

hello hello hello hello hello

2.类选择器。传入css中定义的类选择器名称,就可以控制包含该选择器的所有标签,示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <style>
        .test{

        }
    </style>
    <body>
        <p class="test" ></p>
        <p class="test"></p>
        <p class="test"></p>
        <p></p>
        <p></p>
    </body>
    <script>
        $(".test").html('hello');  // 给包含该类选择器的标签都写入hello
    </script>
</html>

运行结果:

hello hello hello

3.id选择器。传入标签的id值,然后在值的前面加上 # (与css中的选择器命名一样)即可,无论css中是否有定义该id选择器都可以这么使用,示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <style>

    </style>
    <body>
        <p id='test' ></p>
        <p id='test1' ></p>
        <p id='test2' ></p>
    </body>
    <script>
        // 给包含该id的标签都写入hello
        $("#test").html('hello');
        $("#test1").html('hello1');
        $("#test2").html('hello2');
    </script>
</html>

运行结果:

hello hello1 hello2

属性选择器,同样的和CSS里的使用方式是一样的: p[title] p标记中只要有titile属性即可 p[title='1'] 只要写类title属性并且等于 1 p[title*='1'] 只要属性中包含1即可 p[title^='1'] 只要属性开头是1即可 p[title$=1] 只要属性结尾是1即可

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <body>
        <pre title="test" ></pre>
        <p title="test2"  ></p>
        <p title="10086" ></p>
        <p title="001" ></p>
        <p title="100" ></p>
    </body>
    <script>
        $("pre[title]").html('hello');
        $("p[title='test2']").html('hello1');
        $("p[title*='86']").html('hello2');
        $("p[title^='0']").html('hello3');
        $("p[title$='0']").html('hello4');
    </script>
</html>

运行结果:

hello hello1 hello2 hello3 hello4

以上只是演示的了一些常见的选择器使用方式,其他的选择器使用方式可以参考以下jQuery的中文文档: https://www.jquery123.com/

简单的事件注册:

通过选择器搜索出来的对象包装后是jQuery对象,所以不能使用DOM中的事件注册方式,需要使用jQuery对象的事件注册方式。示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
    <body>
        <button class="test" >Hi</button>
    </body>
    <script>
        // 当对象被点击,就会执行function里面的代码,这和onclick事件一样
        $(".test").click(function(){
            alert('hello');
        });
    </script>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • jQuery简介
  • jQuery优势
  • 配置jQuery环境
  • 使用jQuery的选择器
    • 简单的事件注册:
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档