jQuery基础

1. 自定义js框架

1.1 js框架概述

  • 框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。框架是完成某种功能的半成品,可将繁琐的代码进行抽取,并提供出更加简洁,功能更加强大的语法实现。框架是对底层的API进行封装,对外提供更加简单的语法来实现最终的功能,从而提高开发效率。

2. jQuery框架介绍

2.1 jQuery框架概述

  • jQuery是一个优秀的javascript的轻量级框架之一,兼容css3和各大浏览器,提供了dom、events、animate、ajax等简易的操作。并且jquery的插件非常丰富,大多数功能都有相应的插件解决方案。
  • 作用:简化js的DOM树的操作
  • 本质是js数组

2.2 jQuery的版本及引入

2.2.1 版本
  • 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。

  • 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x。

  • 3.x:不兼容IE678,只支持最新的浏览器,老的jQuery插件不支持。

  • 开发版本与生产版本,命名为jQuery-x.x.x.js为开发版本,命名为jQuery-x.x.x.min.js为生产版本。开发版有格式,方便查看源码,较大;生产版无缩进注释,体积小。

2.2.2 jQuery的引入
<script type="text/javascript" src="jquery-x.x.x.js>

3. jQuery对象和js的DOM对象的区别和转换

3.1 jQuery和js的区别

  1. 加载事件不同。

    • js加载完成事件一个html只能有1个,后面的会覆盖前面的;
    • jQuery加载完成事件一个html页面可以有多个,不会相互覆盖。
    jQuery加载完成事件代码(重要)
    $(function (){
        //事件代码
    })
    
  2. jQuery对象与js的dom对象不同,不能相互调用对方的方法。需要相互转换。建议将js对象转换为jq对象进行调用。

3.2 jQuery和js的转换

  • 使用jQuery属性和方法必须保证对象时jQuery对象而不是js的DOM对象。
  • 转换语法:
    1. js的DOM对象转换成jQuery对象,语法:$(js对象)
    2. jQuery对象通过数组存储多个标签,转换成js对象的语法:jquery对象[索引]jquery对象.get(索引)

3.3 示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery和js的区别</title>
    <style type="text/css"></style>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        /*js加载完成事件*/
        window.onload = function () {
            alert("js1加载");     //无法运行出来
        };
        window.onload = function () {
            alert("js2加载");     //覆盖上一个js加载事件
        };

        /*jq加载完成事件*/
        $(function () {
            alert("jq1加载");     //运行出来
        });
        $(function () {
            alert("jq2加载");     //运行出来
        });

        $(function () {
            //获得js对象
            var jsObj = document.getElementById("my");
            // 获得jQuery对象
            var jqObj = $("#my");

            //使用js对象弹出标签体内容
            alert("使用js对象弹出标签体内容:" + jsObj.innerHTML);
            //使用jq对象弹出标签体内容
            alert("使用jq对象弹出标签体内容:" + jqObj.html());

            //使用js对象调用jq成员弹出标签体内容
            //alert("使用js对象调用jq成员弹出标签体内容:"+jsObj.html());//不能运行
            //使用jq对象调用js成员弹出标签体内容
            //alert("使用jq对象调用js成员弹出标签体内容:"+jqObj.innerHTML);//undefined

            //相互转化
            alert("使用js对象调用jq成员弹出标签体内容:"+$(jsObj).html());
            alert("使用jq对象调用js成员弹出标签体内容:"+jqObj[0].innerHTML);
        });
    </script>
</head>
<body>
<div id="my">你好</div>
</body>
</html>

3.4 注意事项-何时使用加载完成事件

  • 给标签注册/绑定事件,且被注册的标签执行顺序在注册事件代码之后时,才需要使用加载完成事件。确保被注册标签先加载出来,后再注册事件。
  • 如果被注册的标签先加载完,然后才到加载注册事件代码(即事件的注册script代码放在被注册标签后面),是不需要使用加载完成事件的;
  • 如果在标签内已经用onclick等属性注册了事件,那么事件的具体代码即使写在标签前也不需要使用加载完成事件
  • 示例代码可以详见案例代码第二个(全选和全不选)

4. jQuery选择器

4.1 基本选择器

4.1.1 语法
选择器名称语法解释
标签选择器(元素选择器)$("html标签名")获得所有匹配标签名称的于元素
id选择器$("#id的属性值")获得与指定id属性值匹配的元素
类选择器$(".class的属性值")获得与指定的class属性值匹配的元素
注意
  • 如果有多个条件,那么用分隔
4.1.2 示例代码
// <input type="button" value="改变 id 为 one 的元素的背景色为 红色"  id="b1"/>
$("#b1").click(function () {
    $("#one").css("background-color","red");
});
// <input type="button" value=" 改变元素名为 <div> 的所有元素的背景色为 红色"  id="b2"/>
$("#b2").click(function () {
	$("div").css("background-color","red");
});
// <input type="button" value=" 改变 class 为 mini 的所有元素的背景色为 红色"  id="b3"/>
$("#b3").click(function () {
    $(".mini").css("background-color","red");
});
// <input type="button" value=" 改变所有的<span>元素和 id 为 two 的元素的背景色为红色"  id="b4"/>
$("#b4").click(function () {
    $("span,#two").css("background-color","red");
});

4.2 层级选择器

4.2.1 语法
选择器名称语法解释
后代选择器$("A B")选择A元素内部的所有B元素
子选择器$("A > B")选择A元素内部的所有B子元素
4.2.2 示例代码
// <input type="button" value=" 改变 <body> 内所有 <div> 的背景色为红色"  id="b1"/>
$("#b1").click(function () {
	$("body div").css("background-color","red");
});
// <input type="button" value=" 改变 <body> 内子 <div> 的背景色为 红色"  id="b2"/>
$("#b2").click(function () {
    $("body > div").css("background-color","red");
});

/*扩展内容*/
// <input type="button" value=" 改变 id 为 one 的下一个 <div> 的背景色为 红色"  id="b3"/>
$("#b3").click(function () {
    $("#one + div").css("background-color","red");
});
// <input type="button" value=" 改变 id 为 two 的元素后面的所有兄弟<div>的元素的背景色为 红色"  id="b4"/>
$("#b4").click(function () {
    $("#two ~ div").css("background-color","red");
});
// <input type="button" value=" 改变 id 为 two 的元素所有 <div> 兄弟元素的背景色为红色"  id="b5"/>
$("#b5").click(function () {
    //$("#two").siblings(),获取id为two的所有兄弟元素。
    $("#two").siblings("div").css("background-color","red");
});

4.3 属性选择器

4.3.1 语法
选择器名称语法解释
属性选择器$("A[属性名]")包含指定属性的A元素
属性选择器$("A[属性名=值]")包含指定属性等于指定值的A元素
复合属性选择器$("A[属性名=值]...")包含多个属性条件的A元素
4.3.2 示例代码
// <input type="button" value=" 含有属性title 的div元素背景色为红色"  id="b1"/>
$("#b1").click(function () {
	$("div[title]").css("background-color","red");
});
// <input type="button" value=" 属性title值等于test的div元素背景色为红色"  id="b2"/>
$("#b2").click(function () {
    $("div[title='test']").css("background-color","red");
});

/*拓展内容,查API*/

// <input type="button" value=" 属性title值不等于test的div元素(没有属性title的也将被选中)背景色为红色"  id="b3"/>
$("#b3").click(function () {
    $("div[title!='test']").css("background-color","red");
});
// <input type="button" value=" 属性title值 以te开始 的div元素背景色为红色"  id="b4"/>
$("#b4").click(function () {
    $("div[title^='te']").css("background-color","red");
});
// <input type="button" value=" 属性title值 以est结束 的div元素背景色为红色"  id="b5"/>
$("#b5").click(function () {
    $("div[title$='est']").css("background-color","red");
});
// <input type="button" value="属性title值 含有es的div元素背景色为红色"  id="b6"/>
$("#b6").click(function () {
    $("div[title*='es']").css("background-color","red");
});
// <input type="button" value="选取有属性id的div元素,然后在结果中选取属性title值含有“es”的 div 元素背景色为红色"  id="b7"/>
$("#b7").click(function () {
    $("div[id][title*='es']").css("background-color","red");
});

4.4 基本过滤选择器

4.4.1 语法
选择器名称语法解释
首元素选择器:first获得选择的元素中的第一个元素
尾元素选择器:last获得选择的元素中的最后一个元素
非元素选择器:not(selecter)不包括指定内容的元素,排除元素
偶数选择器:even索引值为偶数的元素,从 0 开始计数
奇数选择器:odd索引值为奇数的元素,从 0 开始计数
等于索引选择器:eq(index)指定索引元素
大于索引选择器:gt(index)大于指定索引元素
小于索引选择器:lt(index)小于指定索引元素
标题选择器:header获得标题(h标签)元素,固定写法
  • 注意:其中的索引值是根据代码执行的顺序或者说加载顺序编排

比方说有两个div,第一个div里面有两个小的div。那么索引值是第一个大的div为0,大div里面的第一个小div索引值为1,第二个小div为2,然后才到第二个大div为3。原因是第一个大div加载完成(包括里面的两个加载完成),才会去加载第二个大div

4.4.2 示例代码
// <input type="button" value=" 改变第一个 div 元素的背景色为 红色"  id="b1"/>
$("#b1").click(function () {
   $("div:first").css("background-color","red");
});
// <input type="button" value=" 改变最后一个 div 元素的背景色为 红色"  id="b2"/>
$("#b2").click(function () {
   $("div:last").css("background-color","red");
});
// <input type="button" value=" 改变class不为 one 的所有 div 元素的背景色为 红色"  id="b3"/>
$("#b3").click(function () {
    $("div:not(.one)").css("background-color","red");
});
// <input type="button" value=" 改变索引值为偶数的 div 元素的背景色为 红色"  id="b4"/>
$("#b4").click(function () {
    $("div:even").css("background-color","red");
});
// <input type="button" value=" 改变索引值为奇数的 div 元素的背景色为 红色"  id="b5"/>
$("#b5").click(function () {
     $("div:odd").css("background-color","red");
});
// <input type="button" value=" 改变索引值为大于 3 的 div 元素的背景色为 红色"  id="b6"/>
$("#b6").click(function () {
    $("div:gt(3)").css("background-color","red");
});
// <input type="button" value=" 改变索引值为等于 3 的 div 元素的背景色为 红色"  id="b7"/>
$("#b7").click(function () {
    $("div:eq(3)").css("background-color","red");
});
// <input type="button" value=" 改变索引值为小于 3 的 div 元素的背景色为 红色"  id="b8"/>
$("#b8").click(function () {
    $("div:lt(3)").css("background-color","red");
});
// <input type="button" value=" 改变所有的标题元素的背景色为 红色"  id="b9"/>
$("#b9").click(function () {
   $(":header").css("background-color","red");
});
// <input type="button" value=" 改变当前正在执行动画的所有元素的背景色为 红色"  id="b10"/>
$("#b10").click(function () {
    $(":animated").css("background-color","red");
});

4.5 表单属性选择器

4.5.1 语法
选择器名称语法解释
可用元素选择器:enabled获得可用元素
不可用元素选择器:disabled获得不可用元素
选中选择器:checked获得单选/复选框选中的元素
选中选择器:selected获得下拉框选中的元素
  • 格式:(以input元素为例)

    var $inputs = $("input[type='text']:enabled"); 
    
  • 上述代码可以简化为

    var $inputs = $(":text:enabled");
    
注意事项

select下拉框中被选中的元素不是select,而是option

4.5.2 示例代码
// <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内可用 <input> 元素的值"  id="b1"/>
$("#b1").click(function () {
    $("input[type='text']:enabled").val("azure");
});
// <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内不可用 <input> 元素的值"  id="b2"/>
$("#b2").click(function () {
    //代码优化
    $(":text:disabled").val("azure");
});
// <input type="button" value=" 利用 jQuery 对象的 length 属性获取多选框选中的个数"  id="b3"/>
$("#b3").click(function () {
    //jq对象.length,获取数组元素的个数
    alert($(":checkbox:checked").length);
});
// <input type="button" value=" 利用 jQuery 对象的 text() 方法获取下拉框选中的内容"  id="b4"/>
$("#b4").click(function () {
    //注意,下拉框选中不是select而是里面的option
    alert($("option:selected").text());
});

5. jQuery的DOM操作

5.1 jQuery对DOM树中的文本和值进行操作

5.1.1 语法
语法解释
val([value])获得/设置元素value属性相应的值
text([value])获得/设置元素的文本内容
html([value])获得/设置元素的标签体内容
  • value是可填项,为空是获取,不为空是设置

5.2 jQuery对DOM树中的属性进行操作

5.2.1 语法
语法解释
attr(name[,value])获得/设置属性的值
prop(name[,value])获得/设置checked、selected属性的值
removeAttr(name)删除属性
  • value是可填项,为空是获取,不为空是设置
5.2.2 attr与prop的注意事项
  • prop是jQuery1.6才开始有,attr一直都有;
  • 如果元素没有设置属性,用attr无法获取,返回undefined;而用prop可以获取没有设置的属性,此时返回false;

结论:

  • 获取选中状态(checked 和 selected )使用prop获取
  • 其他使用attr获取,只有获取不到换成prop

5.3 jQuery对class进行操作

5.3.1 语法
语法解释
css(name[,value])获取/设置指定的CSS样式,本质是操作style属性
addClass(value)addClass(类样式名) 给指定的对象追加指定的新的类样式,本质操作class属性
removeClass(value)removeClass(类样式名) 删除指定的类样式
toggleClass(value)toggleClass(类样式名) 切换样式,如果没有类样式,则添加,如果有类样式,则删除
attr(“style”,“样式值”)设置指定的CSS样式,覆盖原有的css样式
attr(“class”,“类选择器”)设置指定的class属性值(包括添加和移除),覆盖原有的class属性值
5.3.2 示例代码
// <input type="button" value="给id为one设置属性class的值为second"  id="b1"/>
$("#b1").click(function () {
	$("#one").attr("class","second");
});
// <input type="button" value=" addClass"  id="b2"/>
$("#b2").click(function () {
	$("#one").addClass("second");
});
// <input type="button" value="removeClass"  id="b3"/>
$("#b3").click(function () {
	$("#one").removeClass("second");
});
// <input type="button" value=" 切换样式"  id="b4"/>
$("#b4").click(function () {
	$("#one").toggleClass("second");
});
// <input type="button" value=" 通过css()获得id为one背景颜色"  id="b5"/>
$("#b5").click(function () {
	alert($("#one").css("background-color"));
});
// <input type="button" value=" 通过css()设置id为one背景颜色为绿色"  id="b6"/>
$("#b6").click(function () {
	$("#one").css("background-color","green");//操作style属性
});

5.4 jQuery创建插入对象

5.4.1 语法
语法解释
$(“元素”)创建元素对象,注意成对设置
父标签.append(子标签)添加成最后一个子元素,两者之间是父子关系
父标签.prepend(子标签)添加成第一个子元素,两者之间是父子关系
当前标签.before(兄弟标签)添加到当前元素的前面,两者之间是兄弟关系
当前标签.after(兄弟标签)添加到当前元素的后面,两者之间是兄弟关系

注意:

  1. 如果子标签或者兄弟标签在网页中已经存在,那么执行上述的append、prepend、before、after方法时,子标签或者兄弟标签将会从原有的位置移动到目标位置,而不是插入!!
  2. 如果需要在插入已存在的子标签或者兄弟标签保留原有的位置,需要使用clone()克隆当前的标签,具体详见qq表情案例。

5.5 jQuery删除对象

5.5.1 语法
语法解释
jQuery对象.remove()删除jQuery对象
jQuery对象.empty()清空jQuery的所有子元素

6. 综合案例

6.1 隔行换色及全选反选

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>隔行换色及全选反选</title>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        /*
        给表格注册事件,对隔行进行换色
         */
        $(function () {
            /*
            * 由于表从第三行开始显示表格的数据,第一行是按钮,第二行是表头,所以索引值是从2开始(包含2)
            * */
            //获取行索引位置2和以后的行,操作偶数行为粉红色
            //因为:gt(index)是不包含index,所以要index要写1
            $("tr:gt(1):even").css("background-color","pink");
            //获取行索引位置2和以后的行,操作奇数行为黄色
            $("tr:gt(1):odd").css("background-color","yellow");
        });
        /*
        全选反选思路:
        全选:点击全选按钮,全部选中/不选中;子选项全部选上/不选上,则全选按钮点上/不点上;
        反选:点击反选按钮,子选项选上的就不选上,不选上的就选上
        核心:触发子选项点击事件
        */

        /*实现全选功能*/
        //1. 点击全选按钮,全部选中/不选中
        function checkedAll(obj) {
            //注意obj是个js对象,要转换
            $(".itemSelect").prop("checked",$(obj).prop("checked"));
        }
        //2. 子选项全部选上/不选上,则全选按钮点上/不点上
        //由于每个子选项都没有用onclick注册事件,所以在这里注册事件时要使用加载完成事件
        $(function () {
            /*
            思路:给每个子选项注册事件,如果子选项有一个以上没有勾上,那么全选框也不能勾上
            子选项的点击事件触发全选框的点击事件,用this来指代当前触发点击事件的子选项
            */
            //给所有子选项注册事件
            $(".itemSelect").click(function () {
                //this是个js对象,要转换
                if ($(this).prop("checked")==false) {   //当前子选项不选中
                    $("#checkAll").prop("checked",false);   //全选框不勾上
                } else {
                    //子选项全部选中,全选框选中
                    //子选项选中的个数与子选项的个数一致的时候,全选框勾上
                    if ($(".itemSelect").length == $(".itemSelect:checked").length) {
                        $("#checkAll").prop("checked",true);
                    }
                }
            });
        });

        /*
        实现反选功能
        思路:如果点击反选按钮,所有的子选项全都点击一次
         */
        //注册反选点击事件
        $(function () {
            $("#reverse").click(function () {
                $(".itemSelect").click();
            })
        });
    </script>
</head>
<body>
<table id="tab1" border="1" width="800" align="center" >
    <tr>
        <td colspan="5"><input type="button" value="反选" id="reverse"></td>
    </tr>
    <tr style="background-color: #999999;">
        <th><input type="checkbox" id="checkAll" onclick="checkedAll(this)"></th>
        <th>分类ID</th>
        <th>分类名称</th>
        <th>分类描述</th>
        <th>操作</th>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelect"></td>
        <td>1</td>
        <td>手机数码</td>
        <td>手机数码类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelect"></td>
        <td>2</td>
        <td>电脑办公</td>
        <td>电脑办公类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelect"></td>
        <td>3</td>
        <td>鞋靴箱包</td>
        <td>鞋靴箱包类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelect"></td>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
</table>
</body>
</html>

6.2 qq表情案例

需求:点击上列的qq表情,在文本框中追加上去

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>QQ表情选择</title>
    <style type="text/css">
        *{margin: 0;padding: 0;list-style: none;}

        .emoji{margin:50px;}
        ul{overflow: hidden;}
        li{float: left;width: 48px;height: 48px;cursor: pointer;}
        .emoji img{ cursor: pointer; }
    </style>
    <script src="js/jquery-3.3.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        /*
        思路:注册点击事件,点击后克隆图片并追加到p元素内
         */
        //给所有li的img属性注册事件
        $(function () {
            $("li img").click(function () {
                //将当前img克隆并追加到p元素内
                $(".word").append($(this).clone());
            });
        });
    </script>
</head>
<body>
<div class="emoji">
    <ul>
        <li><img src="img/01.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/02.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/03.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/04.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/05.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/06.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/07.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/08.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/09.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/10.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/11.gif" height="22" width="22" alt="" /></li>
        <li><img src="img/12.gif" height="22" width="22" alt="" /></li>
    </ul>
    <p class="word">
        <strong>请发言:</strong>
    </p>
</div>
</body>
</html>

7. 补充知识点

1、 文本框不可用的2种方式

方式1:设置disabled="disabled"属性,文本框背景是灰色,这个是无法提交给服务器的
方式2:设置readyonly="readyonly"属性,文本框背景色是白色,这个是只读但可以提交服务器的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值