JavaScript的封装JQ前端框架

简介: JavaScript的封装JQ前端框架

前言


jQuery 是一个流行的 JavaScript 库,用于简化处理 HTML 文档、事件处理、动画效果和与服务器的交互等前端开发任务。它提供了一个易于使用的 API,可以帮助开发人员更轻松地操作网页元素和执行各种操作。


一些 jQuery 的主要特点和用途包括:


选择器:jQuery 提供了强大的选择器,使您可以轻松选择和操作 HTML 元素。


事件处理:它简化了事件处理,让您能够添加事件监听器,响应用户交互,如点击、悬停等。


动画效果:jQuery 提供了丰富的动画函数,可以创建平滑的过渡效果,如淡入淡出、滑动等。


AJAX:用于发起异步请求以与服务器通信,从而使网页能够动态加载内容,而无需重新加载整个页面。


插件:jQuery 生态系统中有许多插件,可以扩展其功能,使其适应各种需求。


尽管 jQuery 曾经非常流行,但现在随着现代浏览器原生支持许多 jQuery 的功能,以及出现了更先进的前端开发框架,如React、Angular和Vue.js,jQuery 的使用已经有所减少。但它仍然广泛用于一些项目和遗留代码库中。




玩起来


//根据id获取元素
function get(id){
    var obj = document.getElementById(id);
    return obj;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/common.js"></script>
</head>
<body>
<div id="div1">div1</div>
<div id="div2">div2</div>
</body>
<script>
    // var div1 = document.getElementById("div1");
    // var div2 = document.getElementById("div2");
    var div1 = get("div1");
    var div2 = get("div2");
    alert(div1);
    alert(div2);
</script>
</html>




快速入门


  1. 下载JQuery
  • 目前jQuery有三个大版本: 1.x:兼容ie678,使用最为广泛的,官方只做BUG维护, 功能不再新增。因此一般项目来说,使用1.x版本就可以了, 最终版本:1.12.4 (2016年5月20日) 2.x:不兼容ie678,很少有人使用,官方只做BUG维护, 功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x, 最终版本:2.2.4 (2016年5月20日) 3.x:不兼容ie678,只支持最新的浏览器。除非特殊要求, 一般不会使用3.x版本的,很多老的jQuery插件不支持这个版本。 目前该版本是官方主要更新维护的版本。最新版本:3.2.1(2017年3月20日)
  • jquery-xxx.js 与 jquery-xxx.min.js区别:
  1. jquery-xxx.js:开发版本。给程序员看的,有良好的缩进和注释。体积大一些
  2. jquery-xxx.min.js:生产版本。程序中使用,没有缩进。体积小一些。程序加载更快
  1. 导入JQuery的js文件:导入min.js文件


  1. 使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jq快速入门</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id="div1">this is div1</div>
<div id="div2">this is div2</div>
</body>
<script>
    //获取页面上的元素
    var div1 = $("#div1");
    alert(div1.html());
</script>
</html>



JQuery对象和JS对象区别与转换


  1. JQuery对象在操作时,更加方便。
  2. JQuery对象和js对象方法不通用的.
  3. 两者相互转换
  • jq -- > js : jq对象索引 或者 jq对象.get(索引)
  • js -- > jq : $(js对象)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jq快速入门</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id="div1">this is div1</div>
<div id="div2">this is div2</div>
</body>
<script>
    //获取页面上的元素
    // var div1 = $("#div1");
    // alert(div1.html());
    //js和jq对象的相互转换
    var divArr = document.getElementsByTagName("div");
    //alert(divArr);//可以当成数组来使用
    for (var i = 0; i < divArr.length; i++) {
        // divArr[i].innerHTML="aaa";
        //js对象转换为jq对象
        //$(divArr[i]).html("aaa");
    }
    var divArr2 = $("div");
    //alert(divArr2);//也可以当成数组来使用
    //divArr2.html("ccc");
  //divArr2.innerHTML="bbb";js和jq对象的方法属性不通用
    for (var i = 0; i < divArr2.length; i++) {
        //jq转换为js对象
        divArr2.get(i).innerHTML="ddd";
    }
    var $div1 = $("#div1");
    $div1[0].innerHTML="eee";
</script>
</html>



选择器:筛选具有相似特征的元素(标签)


  1. 事件绑定 //1.获取b1按钮 $("#b1").click(function(){ alert("abc"); });
  2. 入口函数 $(function () {

});

window.onload  和 $(function) 区别

window.onload 只能定义一次,如果定义多次,后边的会将前边的覆盖掉

  • $(function)可以定义多次的。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件绑定</title>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        window.onload=function () {
            $("#btn1").click(function () {
                alert("132");
            });
        }
        //定义多次,后面的会覆盖前面的
        window.onload=function () {
            $("#btn1").click(function () {
                alert("abc");
            });
        }
       $(function () {//dom文档加载完成之后,执行其中的代码
           $("#btn1").click(function () {
               alert("456");
           });
       });
        //可以定义多次
        $(function () {
            $("#btn1").click(function () {
                alert("456");
            });
        });
    </script>
</head>
<body>
    <button id="btn1">按钮</button>
</body>
</html>


基本选择器


  1. 标签选择器(元素选择器)
  • 语法: $("html标签名") 获得所有匹配标签名称的元素
  1. id选择器
  • 语法: $("#id的属性值") 获得与指定id属性值匹配的元素
  1. 类选择器
  • 语法: $(".class的属性值") 获得与指定的class属性值匹配的元素
  1. 并集选择器:
  • 语法: $("选择器1,选择器2....") 获取多个选择器选中的所有元素



层级选择器


  1. 后代选择器
  • 语法: $("A B ") 选择A元素内部的所有B元素
  1. 子选择器
  • 语法: $("A > B") 选择A元素内部的所有B子元素
  1. 属性选择器
  1. 属性名称选择器
  • 语法: $("A属性名") 包含指定属性的选择器
  1. 属性选择器
  • 语法: $("A属性名='值'") 包含指定属性等于指定值的选择器
  1. 复合属性选择器
  • 语法: $("A属性名='值'...") 包含多个属性条件的选择器




过滤选择器


  1. 首元素选择器
  • 语法: :first 获得选择的元素中的第一个元素
  1. 尾元素选择器
  • 语法: :last 获得选择的元素中的最后一个元素
  1. 非元素选择器
  • 语法: :not(selector) 不包括指定内容的元素
  1. 偶数选择器
  • 语法: :even 偶数,从 0 开始计数
  1. 奇数选择器
  • 语法: :odd 奇数,从 0 开始计数
  1. 等于索引选择器
  • 语法: :eq(index) 指定索引元素equals
  1. 大于索引选择器
  • 语法: :gt(index) 大于指定索引元素greater than
  1. 小于索引选择器
  • 语法: :lt(index) 小于指定索引元素 less than
  1. 标题选择器
  • 语法: :header 获得标题(h1~h6)元素,固定写法




表单过滤选择器


  1. 可用元素选择器
  • 语法: :enabled 获得可用元素
  1. 不可用元素选择器
  • 语法: :disabled 获得不可用元素
  1. 选中选择器
  • 语法: :checked 获得单选/复选框选中的元素
  1. 选中选择器
  • 语法: :selected 获得下拉框选中的元素




DOM操作


1. 内容操作

  1. html(): 获取/设置元素的标签体内容  内容  --> 内容
  2. text(): 获取/设置元素的标签体纯文本内容  内容 --> 内容
  3. val(): 获取/设置元素的value属性值


2. 属性操作


通用属性操作


  1. attr(): 获取/设置元素的属性attribute
  2. removeAttr():删除属性
  3. prop():获取/设置元素的属性propertity
  4. removeProp():删除属性
  • attr和prop区别?
  1. 如果操作的是元素的固有属性,则建议使用prop
  2. 如果操作的是元素自定义的属性,则建议使用attr


从jQuery1.6开始,使用attr()获取这些属性的返回值为String类型,如果被选中(或禁用)就返回checked、selected或disabled,否则(即元素节点没有该属性)返回undefined。


jQuery认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。


总结建议:


获取和设置disabled、selected、checked这些属性时,应该使用prop()方法,不要使用attr()方法!!能够用prop()操作的尽量用prop()操作,不要用attr()操作。


class属性操作


  1. addClass():添加class属性值
  2. removeClass():删除class属性值
  3. toggleClass():切换class属性
  • toggleClass("one"):
  • 判断如果元素对象上存在class="one",则将属性值one删除掉。  如果元素对象上不存在class="one",则添加
  1. css():



3. CRUD操作


  1. append():父元素将子元素追加到末尾
  • 对象1.append(对象2): 将对象2添加到对象1元素内部,并且在末尾
  1. prepend():父元素将子元素追加到开头
  • 对象1.prepend(对象2):将对象2添加到对象1元素内部,并且在开头
  1. appendTo():
  • 对象1.appendTo(对象2):将对象1添加到对象2内部,并且在末尾
  1. prependTo():
  • 对象1.prependTo(对象2):将对象1添加到对象2内部,并且在开头
  1. after():添加元素到元素后边
  • 对象1.after(对象2): 将对象2添加到对象1后边(外部)。对象1和对象2是兄弟关系
  1. before():添加元素到元素前边
  • 对象1.before(对象2): 将对象2添加到对象1前边(外部)。对象1和对象2是兄弟关系
  1. insertAfter()
  • 对象1.insertAfter(对象2):将对象2添加到对象1后边。对象1和对象2是兄弟关系
  1. insertBefore()
  • 对象1.insertBefore(对象2): 将对象2添加到对象1前边。对象1和对象2是兄弟关系
  1. remove():移除元素
  • 对象.remove():将对象删除掉
  1. empty():清空元素的所有后代元素。
  • 对象.empty():将对象的后代元素全部清空,但是保留当前对象以及其属性节点



动画


三种方式显示和隐藏元素


1. 默认显示和隐藏方式


  1. show([speed,easing,fn])
  2. 参数:
  1. speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)
  2. easing:用来指定切换效果,默认是"swing",可用参数"linear"
  • swing:动画执行时效果是 先慢,中间快,最后又慢
  • linear:动画执行时速度是匀速的
  1. fn:在动画完成时执行的函数,每个元素执行一次。
  1. hide([speed,easing,fn])
  2. toggle(speed,easing,fn)



2. 滑动显示和隐藏方式

  1. slideDown(speed,easing,fn):往下拉,相当于滑动显示
  2. slideUp([speed,easing,fn]):往上拉,相当于滑动隐藏
  3. slideToggle(speed,easing,fn):切换


3. 淡入淡出显示和隐藏方式

  1. fadeIn(speed,easing,fn):淡入,相当于显示
  2. fadeOut(speed,easing,fn):淡出,相当于隐藏
  3. fadeToggle([speed,easing,fn]):切换


4. jQuery 动画 - animate() 方法

jQuery animate() 方法用于创建自定义动画。语法:

$(selector).animate({params},speed,callback);


必需的 params 参数定义形成动画的 CSS 属性。


提示:可以用 animate() 方法来操作所有 CSS 属性吗?


是的,几乎可以!不过,需要记住一件重要的事情:当使用 animate() 时,必须使用 Camel 标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left,使用 marginRight 而不是 margin-right,等等。


可选的 speed 参数规定效果的时长。它可以取以下值:"slow"、"fast" 或毫秒。


可选的 callback 参数是动画完成后所执行的函数名称。

$("button").click(function(){
  $("#showDiv").animate({left:'250px'});
});


jQuery animate() - 操作多个属性

请注意,生成动画的过程中可同时使用多个属性:

$("button").click(function(){
  $("div").animate({
    left:'250px',
    opacity:'0.5',
    height:'150px',
    width:'150px'
  });
});
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
    <script>
        function hideFn() {
            // $("#showDiv").hide("slow","swing",function () {
            //     //alert("隐藏了。。。")
            // });
            //$("#showDiv").hide(5000,"swing");//5秒之内隐藏
            $("#showDiv").slideUp(2000,"swing");
        }
        function showFn() {
            // $("#showDiv").show("slow","swing",function () {
            //     //alert("显示。。。")
            // });
            $("#showDiv").slideDown(3000);
        }
        function toggleFn(){
            //切换显示和隐藏
            // $("#showDiv").toggle(4000,"linear",function () {
            //
            // });
            $("#showDiv").fadeToggle(3000);
        }
        function animateFn(){
            $("#showDiv").animate({
                left:'250px',
                opacity:'0.5',
                height:'150px',
                width:'150px'
            },2000);
        }
    </script>
</head>
<body>
<input type="button" value="点击按钮隐藏div" onclick="hideFn()">
<input type="button" value="点击按钮显示div" onclick="showFn()">
<input type="button" value="点击按钮切换div显示和隐藏" onclick="toggleFn()">
<input type="button" value="点击按钮执行动画" onclick="animateFn()">
<div id="showDiv" style="width:300px;height:300px;background:pink;position: absolute">
    div显示和隐藏
</div>
</body>
</html>




遍历


  1. js的遍历方式
  • for(初始化值;循环结束条件;步长)
  1. jq的遍历方式
  2. jq对象.each(callback)
  1. 语法:jquery对象.each(function(index,element){});
  • index:就是元素在集合中的索引
  • element:就是集合中的每一个元素对象
  • this:集合中的每一个元素对象
  1. 回调函数返回值:
  • false:如果当前function返回为false,则结束循环(break)。
  • true:如果当前function返回为true,则结束本次循环,继续下次循环(continue)
  1. $.each(object, callback)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //js遍历
            var liArr = $("#city li");
            // for (var i = 0; i < liArr.length; i++) {
            //     alert(i+":"+liArr[i].innerHTML);
            // }
            //jq对象.each(callback)
            // liArr.each(function (index,element) {
            //     //3.1,第一种方式 this
            //     //alert(this.innerHTML);
            //     //3.2,第二种方式,index,element
            //
            //     //alert(index+":"+element.innerHTML);
            //     if($(element).html()=="上海"){
            //         //如果返回为false,则结束循环(break);如果为true,则结束本次循环,继续下次循环(continue)
            //         return false;
            //     }
            //     alert(index+":"+element.innerHTML);
            // });
            //全局遍历$.each(object, [callback])
            $.each(liArr,function () {
                alert(this.innerHTML);
            });
        })
    </script>
</head>
<body>
<ul id="city">
    <li>北京</li>
    <li>上海</li>
    <li>天津</li>
    <li>重庆</li>
</ul>
</body>
</html>



事件绑定


  1. jquery标准的绑定方式
  • jq对象.事件方法(回调函数);
  • 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为。
  • 表单对象.submit();//让表单提交
  1. on绑定事件/off解除绑定
  • jq对象.on("事件名称",回调函数)
  • jq对象.off("事件名称")
  • 如果off方法不传递任何参数,则将组件上的所有事件全部解绑




插件


  1. 实现方式:
  2. $.fn.extend(object)
  • 增强通过Jquery获取的对象的功能  $("#id")
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>01-jQuery对象进行方法扩展</title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //jq插件,增强通过Jquery获取的对象的功能
        $.fn.extend({
           check:function(){
               alert("123");
               //this:调用该方法的jq对象
               //this.prop("checked",true);
           },
           uncheck:function () {
               this.prop("checked",false);
           }
        });
        $(function () {
            $("#btn-check").click(function () {
                $("input[type='checkbox']").check();
            })
            $("#btn-uncheck").click(function () {
                $("input[type='checkbox']").uncheck();
            });
        })
    </script>
</head>
<body>
<input id="btn-check" type="button" value="点击选中复选框" onclick="checkFn()">
<input id="btn-uncheck" type="button" value="点击取消复选框选中" onclick="uncheckFn()">
<br/>
<input type="checkbox" value="football">足球
<input type="checkbox" value="basketball">篮球
<input type="checkbox" value="volleyball">排球
</body>
</html>
  1. $.extend(object)
  • 增强JQeury对象自身的功能  $/jQuery
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>01-jQuery对象进行方法扩展</title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //对全局方法扩展2个方法,扩展min方法:求2个值的最小值;扩展max方法:求2个值最大值
        $.extend({
            min:function (a,b) {
                return a<=b?a:b;
            },
            max:function (a,b) {
                return a>=b?a:b;
            }
        });
        var max = $.max(2,3);
        alert(max);
    </script>
</head>
<body>
</body>
</html>




最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
14天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
109 2
|
25天前
|
存储 JavaScript 前端开发
前端技术分享:使用Vue.js与Vuex管理状态
【10月更文挑战第1天】前端技术分享:使用Vue.js与Vuex管理状态
42 6
|
25天前
|
JavaScript 前端开发 开发者
前端技术分享:Vue.js 中的自定义指令
【10月更文挑战第1天】前端技术分享:Vue.js 中的自定义指令
55 5
|
13天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
30 0
|
15天前
|
JavaScript 前端开发 API
Vue.js:现代前端开发的强大框架
【10月更文挑战第11天】Vue.js:现代前端开发的强大框架
61 41
|
9天前
|
前端开发 JavaScript 安全
JavaScript前端开发技术
JavaScript(简称JS)是一种广泛使用的脚本语言,特别在前端开发领域,它几乎成为了网页开发的标配。从简单的表单验证到复杂的单页应用(SPA),JavaScript都扮演着不可或缺的角色。
16 3
|
17天前
|
JavaScript 前端开发 API
Vue.js:打造高效前端应用的最佳选择
【10月更文挑战第9天】Vue.js:打造高效前端应用的最佳选择
15 2
|
17天前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
25天前
|
JavaScript 前端开发 API
前端技术分享:Vue.js 动态路由与守卫
【10月更文挑战第1天】前端技术分享:Vue.js 动态路由与守卫
|
25天前
|
JavaScript 前端开发 数据安全/隐私保护
前端技术分享:使用Vue.js构建响应式表单
【10月更文挑战第1天】前端技术分享:使用Vue.js构建响应式表单