JQuery(一)


jQuery 介绍

JavaScript 库

JavaScript库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等。

简单理解: 就是一个JS 文件,里面对我们原生js代码进行了封装,存放到里面。这样我们可以快速高效的使用这些封装好的功能了。

比如 jQuery,就是为了快速方便的操作DOM,里面基本都是函数(方法)。

jQuery的入口函数

​ jQuery中常见的两种入口函数:

// 第一种: 简单易用。
$(function () {   
    ...  // 此处是页面 DOM 加载完成的入口
}) ; 

// 第二种: 繁琐,但是也可以实现
$(document).ready(function(){
   ...  //  此处是页面DOM加载完成的入口
});

​ 总结:

  1. 等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
  2. 相当于原生 js 中的 DOMContentLoaded。
  3. 不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。
  4. 更推荐使用第一种方式。

jQuery中的顶级对象$

  1. $是 jQuery 的别称,在代码中可以使用 jQuery 代替,但一般为了方便,通常都直接使用 $ 。
  2. $是jQuery的顶级对象,相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法。

jQuery 对象和 DOM 对象

使用 jQuery 方法和原生JS获取的元素是不一样的,总结如下 :

  1. 用原生 JS 获取来的对象就是 DOM 对象
  2. jQuery 方法获取的元素就是 jQuery 对象。
  3. jQuery 对象本质是: 利用$对DOM 对象包装后产生的对象(伪数组形式存储)。

注意:

只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JavaScirpt 方法。

jQuery 对象和 DOM 对象转换

DOM 对象与 jQuery 对象之间是可以相互转换的。因为原生js 比 jQuery 更大,原生的一些属性和方法 jQuery没有给我们封装. 要想使用这些属性和方法需要把jQuery对象转换为DOM对象才能使用。

// 1.DOM对象转换成jQuery对象,方法只有一种
var box = document.getElementById('box');  // 获取DOM对象
var jQueryObject = $(box);  // 把DOM对象转换为 jQuery 对象

// 2.jQuery 对象转换为 DOM 对象有两种方法:
//   2.1 jQuery对象[索引值]
var domObject1 = $('div')[0]

//   2.2 jQuery对象.get(索引值)
var domObject2 = $('div').get(0)
 

总结:实际开发比较常用的是把DOM对象转换为jQuery对象,这样能够调用功能更加强大的jQuery中的方法。

jQuery 选择器

原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。

基础选择器

$("选择器")   //  里面选择器直接写 CSS 选择器即可,但是要加引号 

层级选择器

​ 层级选择器最常用的两个分别为:后代选择器和子代选择器。

基础选择器和层级选择器案例代码

<body>
    <div>我是div</div>
    <div class="nav">我是nav div</div>
    <p>我是p</p>
    <ul>
        <li>我是ul 的</li>
        <li>我是ul 的</li>        
        <li>我是ul 的</li>
    </ul>
    <script>
        $(function() {
            console.log($(".nav"));
            console.log($("ul li"));
        })
    </script>
</body>

隐式迭代

代码案例

<script>
    // 1. 获取四个div元素 
    console.log($("div"));
    // 2. 给四个div设置背景颜色为粉色 jquery对象不能使用style
    $("div").css("background", "pink");
    // 3. 隐式迭代就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法
    $("ul li").css("color", "red");
</script>

筛选选择器

筛选选择器,顾名思义就是在所有的选项中选择满足条件的进行筛选选择。常见如下 :

案例代码

<body>
    <ul>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
    </ul>
    <ol>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
    </ol>
    <script>
        $(function() {
            $("ul li:first").css("color", "red");
            $("ul li:eq(2)").css("color", "blue");
            $("ol li:odd").css("color", "skyblue");
            $("ol li:even").css("color", "pink");
        })
    </script>
</body>

另: jQuery中还有一些筛选方法,类似DOM中的通过一个节点找另外一个节点,父、子、兄以外有所加强。

偏重于记忆,演示代码略。

知识铺垫

  • jQuery 设置样式
$('div').css('属性', '值')    
  • jQuery 里面的排他思想
// 想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(this).css(“color”,”red”);
$(this).siblings(). css(“color”,””);
  • 隐式迭代
// 遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
// 简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
$('div').hide();  // 页面中所有的div全部隐藏,不用循环操作
  • 链式编程
// 链式编程是为了节省代码量,看起来更优雅。
$(this).css('color', 'red').sibling().css('color', ''); 
  • 排他思想
$(this).eq(index).show().sibling().hide()    //指定元素显示,其他隐藏

案例代码:下拉菜单

<script>
     $(function() {
         // 鼠标经过
         $(".nav>li").mouseover(function() {
             // $(this) jQuery 当前元素  this不要加引号
             // show() 显示元素  hide() 隐藏元素
             $(this).children("ul").show();
         });
         // 鼠标离开
         $(".nav>li").mouseout(function() {
             $(this).children("ul").hide();
         })
     })
 </script>

jQuery 样式操作

jQuery中常用的样式操作有两种:css() 和 设置类样式方法

操作 css 方法

jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。

常用以下三种形式 :

// 1.参数只写属性名,则是返回属性值
var strColor = $(this).css('color');

// 2.  参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,值如果是数字可以不用跟单位和引号
$(this).css(''color'', ''red'');

// 3.  参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开, 属性可以不用加引号
$(this).css({ "color":"white","font-size":"20px"});

注意:css() 多用于样式少时操作,多了则不太方便。

设置类样式方法

作用等同于以前的 classList,可以操作类样式, 注意操作类里面的参数不要加点。

常用的三种设置类样式方法:

// 1.添加类
$("div").addClass("current");

// 2.删除类
$("div").removeClass("current");

// 3.切换类
$("div").toggleClass("current");

​ 注意:

  1. 设置类样式方法比较适合样式多时操作,可以弥补css()的不足。
  2. 原生 JS 中 className 会覆盖元素原先里面的类名,jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。

jQuery 效果

jQuery 给我们封装了很多动画效果,最为常见的如下:

  • 显示隐藏:show() / hide() / toggle() ;
  • 划入画出:slideDown() / slideUp() / slideToggle() ;
  • 淡入淡出:fadeIn() / fadeOut() / fadeToggle() / fadeTo() ;
  • 自定义动画:animate() ;

淡入淡出案例代码

<body>
    <button>淡入效果</button>
    <button>淡出效果</button>
    <button>淡入淡出切换</button>
    <button>修改透明度</button>
    <div></div>
    <script>
        $(function() {
            $("button").eq(0).click(function() {
                // 淡入 fadeIn()
                $("div").fadeIn(1000);
            })
            $("button").eq(1).click(function() {
                // 淡出 fadeOut()
                $("div").fadeOut(1000);

            })
            $("button").eq(2).click(function() {
                // 淡入淡出切换 fadeToggle()
                $("div").fadeToggle(1000);

            });
            $("button").eq(3).click(function() {
                //  修改透明度 fadeTo() 这个速度和透明度要必须写
                $("div").fadeTo(1000, 0.5);

            });


        });
    </script>
</body>

停止动画排队

动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。

停止动画排队的方法为:stop() ;

  • stop() 方法用于停止动画或效果。
  • stop() 写到动画或者效果的前面, 相当于停止结束上一次的动画。

总结: 每次使用动画之前,先调用 stop() ,在调用动画。

手风琴案例

<script type="text/javascript">
        $(function() {
            // 鼠标经过某个小li 有两步操作:
            $(".king li").mouseenter(function() {
                // 1.当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
                $(this).stop().animate({
                    width: 224
                }).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
                // 2.其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出
                $(this).siblings("li").stop().animate({
                    width: 69
                }).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();
            })
        });
    </script>

jQuery 属性操作

jQuery 常用属性操作有三种:prop() / attr() / data()

元素固有属性值 prop()

所谓元素固有属性就是元素本身自带的属性,比如 元素里面的 href ,比如 元素里面的 type。

语法

获取属性语法

prop(“属性”)

设置属性值

prop(“属性”,“属性值”)

更适合操作表单属性:disabled / checked / selected 等。

元素自定义属性值 attr()

用户自己给元素添加的属性,我们称为自定义属性。 比如给 div 添加 index =“1”。

语法

获取属性语法

attr(“属性”)

设置属性语法

attr(“属性”,”属性值”)

数据缓存 data()

data() 方法可以在指定的元素上存取数据,并不会修改 DOM 元素结构。一旦页面刷新,之前存放的数据都将被移除。

语法

附加数据语法

data(“name”,”value”)

获取数据语法

data(“name”)

同时,还可以读取 HTML5 自定义属性 data-index ,得到的是数字型。

演示代码

<body>
    <a href="http://www.itcast.cn" title="都挺好">都挺好</a>
    <input type="checkbox" name="" id="" checked>
    <div index="1" data-index="2">我是div</div>
    <span>123</span>
    <script>
        $(function() {
            //1. element.prop("属性名") 获取元素固有的属性值
            console.log($("a").prop("href"));
            $("a").prop("title", "我们都挺好");
            $("input").change(function() {
                console.log($(this).prop("checked"));
            });
            // console.log($("div").prop("index"));
            // 2. 元素的自定义属性 我们通过 attr()
            console.log($("div").attr("index"));
            $("div").attr("index", 4);
            console.log($("div").attr("data-index"));
            // 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面
            $("span").data("uname", "andy");
            console.log($("span").data("uname"));
            // 这个方法获取data-index h5自定义属性 第一个 不用写data-  而且返回的是数字型
            console.log($("div").data("index"));
        })
    </script>
</body>

创建、添加、删除

jQuery方法操作元素的创建、添加、删除方法很多,则重点使用部分

语法总和

  1. 创建
    $(“<li></li>”); 动态的创建了一个

  2. 内部添加

element.append(“内容”) 把内容放入匹配元素内部最后面,类似原生appendChild.

element.prepend(“内容”) 把内容放入匹配元素内部最前面。

  1. 外部添加

element.after(“内容”) 把内客放入目标元素后面

element.before(“内容”) 把内窖放入目标元素前面

内部添加元素,生成之后,它们是父子关系。

外部添加元素,生成之后,他们是兄弟关系。

  1. 删除元素

element.remove() 删除匹配的元素(本身)

element.empty() 删除匹配的元素集合中所有的子节点

element.html(“”) 清空匹配的元素内容

remove 删除元素本身。

empt() 和html(“”)作用等价,都可以删除元素里面的内容,只不过html还可以设置内容。

jQuery 尺寸、位置操作

jQuery 尺寸操作

jQuery 尺寸操作包括元素宽高的获取和设置,且不一样的API对应不一样的盒子模型。

语法 用法
width() / height() 取得匹配元素宽度和高度值只算width / height
innerWidth() / innerHeight() 取得匹配元素宽度和高度值包含padding
outerWidth() / outerHeight() 取得匹配元素宽度和高度值包含padding,border
outerWidth(true) / outerHeight(true) 取得匹配元素宽度和高度值包含padding、borde、 margin

以上参数为空,则是获取相应值,返回的是数字型。

如果参数为数字,则是修改相应值。

参数可以不必写单位。

jQuery 位置操作

jQuery的位置操作主要有三个: offset()、position()、scrollTop()/scrollLeft()

语法

  1. offset(设置或获取元素偏移

    ① offset()方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系。

    ② 该方法有2个属性left. top, offset().top 用于获取距离文档顶部的距离,offset().left用于获取距离文档左侧的距离。

    ③ 可以设置元素的偏移: offset({ top: 10, left: 30 });

  2. position()获取元素偏移

    ① position()方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为准。

    ② 该方法有2个属性left. top.,position().top 用于获取距离定位父级顶部的距离,position().left 用于获取距离定位父级左侧的距离。

    ③该方法只能获取。

  3. scrollTop()/scrollLeft()设置或获取元素被卷去的头部和左侧

    ① scrollTop() 方法设置或返回被选元素被卷去的头部。

    ② 不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部。

jQuery 事件注册

jQuery 为我们提供了方便的事件注册机制,是开发人员抑郁操作优缺点如下:

  • 优点: 操作简单,且不用担心事件覆盖等问题。
  • 缺点: 普通的事件注册不能做事件委托,且无法实现事件解绑,需要借助其他方法。

语法

element.事件(function(){})
$("div") .click (function(){事件处理程序 })			//其他事件和原生基本一致。
//比如mouseover. mouseout. blur. focus. change. keydown. keyup. resize. scroll 等

事件处理 on() 绑定事件

因为普通注册事件方法的不足,jQuery又创建了多个新的事件绑定方法bind() / live() / delegate() / on()等,其中最好用的是: on()

on()方法优势1:

可以绑定多个事件,多个处理事件处理程序。

>$("div") .on({
>mouseover: function(){},
>mouseout: function(){},
>click: function() {
>});

如果事件处理程序相同

>$ ("div") .on("mouseover mouseout", function() {
>$ (thi3) .toggleC1a33 ("current");
>});

on()方法优势2:

可以事件委派操作。事件委派定义是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。

>$('ul') .on('click', 'li', function() {
>alert('he1lo world!');
>})

在此之前有bind(), live() ,delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们。

on()方法优势3:

动态创建的元素,click()没有办法绑定事件,on()可以给动态生成的元素绑定事件

>$("div") .on("click","p", function(){
   alert ("动态生成的元素绑定事件")
>});
>("div").append($ ("<p>我是动态创建的p</p>"));

代码实例:发布留言

<script>
    $(function() {
        // 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中
        $(".btn").on("click", function() {
            var li = $("<li></li>");
            li.html($(".txt").val() + "<a href='javascript:;'> 删除</a>");
            $("ul").prepend(li);
            li.slideDown();
            $(".txt").val("");
        })
        // 2.点击的删除按钮,可以删除当前的微博留言li
        // $("ul a").click(function() {  // 此时的click不能给动态创建的a添加事件
        //     alert(11);
        // })
        // on可以给动态创建的元素绑定事件
        $("ul").on("click", "a", function() {
            $(this).parent().slideUp(function() {
                $(this).remove();
            });
        })
    })
 </script>

事件处理 off() 解绑事件

当某个事件上面的逻辑,在特定需求下不需要的时候,可以把该事件上的逻辑移除,这个过程我们称为事件解绑。jQuery 为我们提供 了多种事件解绑方法:die() / undelegate() / off() 等,甚至还有只触发一次的事件绑定方法 one(),在这里我们重点讲解一下 off() ;

语法

off()方法可以移除通过on()方法添加的事件处理程序。

$("p").off()   						//解绑p元素所有事件处理程序
$("p").off("click") 			   // 解绑p元素上面的点击事件后面的foo 是侦听函数名
$("ul").off("click", "li");        // 解绑事件委托

如果有的事件只想触发一-次,可以使用one()来绑定事件。

事件处理 trigger() 自动触发事件

有些时候,在某些特定的条件下,我们希望某些事件能够自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。由此 jQuery 为我们提供了两个自动触发事件 trigger() 和 triggerHandler() ;

语法

第一种: trigger()

element.click() 					// 第一种简写形式
element. trigger("type") 			// 第二种自动触发模式

第二种: triggerHandler0

element. triggerHandler(type) 		// 第三种自动触发模式

triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。

jQuery 事件对象

jQuery 对DOM中的事件对象 event 进行了封装,兼容性更好,获取更方便,使用变化不大。事件被触发,就会有事件对象的产生。

语法

>element.on(event3, [selector], function(event) {})

阻止默认行为: event,preventDefault() 或者return false

阻止冒泡: event.stopPropagation()

jQuery中的 event 对象使用,可以借鉴 API 和 DOM 中的 event 。

jQuery 拷贝对象

jQuery中分别为我们提供了两套快速获取和设置元素尺寸和位置的API,方便易用

语法

$.extend([deep], target, object1, [objectN])
  1. deep:如果设为true为深拷贝,默认为false 浅拷贝

  2. target:要拷贝的目标对象

  3. object1:待拷贝到第一个对象的对象。

  4. objectN:待拷贝到第N个对象的对象。

  5. 浅拷贝目标对象引用的被拷贝的对象地址,修改目标对象会影响被拷贝对象。

  6. 深拷贝,前面加true,完全克隆,修改目标对象不会影响被拷贝对象。

演示代码

 <script>
     $(function() {
  		// 1.合并数据
         var targetObj = {};
         var obj = {
             id: 1,
             name: "andy"
         };
         // $.extend(target, obj);
         $.extend(targetObj, obj);
         console.log(targetObj);
  		// 2. 会覆盖 targetObj 里面原来的数据
         var targetObj = {
             id: 0
         };
         var obj = {
             id: 1,
             name: "andy"
         };
         // $.extend(target, obj);
         $.extend(targetObj, obj);
         console.log(targetObj); 
     })
</script>

jQuery 多库共存

实际开发中,很多项目连续开发十多年,jQuery版本不断更新,最初的 jQuery 版本无法满足需求,这时就需要保证在旧有版本正常运行的情况下,新的功能使用新的jQuery版本实现,这种情况被称为,jQuery 多库共存。

**jQuery解决方案: **

  1. 把里面的$符号统- -改为 jQuery。比如jQuery(“div”)

  2. jQuery变量规定新的名称:$.noConflict() varxx = $.noConflict();

演示代码

<script>
	$(function() {
  		// 让jquery 释放对$ 控制权 让用自己决定
  		var suibian = jQuery.noConflict();
  		console.log(suibian("span"));
	})
</script>

jQuery 插件

jQuery 插件常用的网站:

  1. jQuery 插件库 http://www.jq22.com/

  2. jQuery 之家 http://www.htmleaf.com/

    jQuery 插件使用步骤:

  3. 引入相关文件。(jQuery 文件 和 插件文件)

  4. 复制相关html、css、js (调用插件)。

图片懒加载插件

图片的懒加载就是:当页面滑动到有图片的位置,图片才进行加载,用以提升页面打开的速度及用户体验。

bootstrap组件

Bootstrap是 Twitter 公司设计的基于HTML、CSS、JavaScript开发的简洁、直观、强悍的前端开发框架,他依靠jQuery实现,且支持响应式布局,使得 Web 开发更加方便快捷。


文章作者: 小小星仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小星仔 !
评论
  目录