前端(JQuery语言)

一、jQuery的优势

• jQuery是一个轻量级的、兼容多浏览器的JavaScript库
• 链式表达式:jQuery的链式操作可以把多个操作写在一行代码里,更加简洁
• Ajax操作支持:jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信

二、jQuery的引入方式

注意:
直接下载文件到本地(最常用),从本地中导入
使用文件的网络地址
示例:
<script src="jquery-3.4.1.js"></script>    // 本地导入
<<script src="https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>    // 网络地址导入(bootcdn)

三、jQuery对象

注意:
通过jQuery包装DOM对象后产生的对象
jQuery对象是 jQuery独有的(jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法)
通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象

jQuery与dom语法对比:
var $variable = jQuery对像    // 声明一个jQuery对象变量的时候在变量名前面加上$
var variable = DOM对象

jQuery与dom转换:
$variable[0]                // jQuery对象转成DOM对象(通过一个jQuery对象+[0]索引零,就变成了DOM对象,就可以使用JS的代码方法了)
$(DOM对象)               // DOM对象转换成jQuery对象($(DOM对象),通过$符号包裹一下就可以了)

jQuery与dom示例对比:
$("#i1").html();                      // jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML;           // DOM对象使用DOM的方法

$(selector).action() // $(selector)找到某个标签,.action()通过这个标签对象调用它的一些方法

四、jQuery基础语法(  查找标签)

  
• html语法:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            height: 100px;
            width: 100px;
            background-color: red;
        }
    </style>
</head>
<body>


<script src="jquery-3.4.1.js"></script>

<div id="d1" class="c1">
    <div class="c3">
        儿子标签
        <div class="c4">孙子标签1</div>
        <div class="c5">孙子标签2</div>
    </div>
</div>

<p id="d4">毗邻标签</p>
<div id="d2" class="c1"></div>
<div id="d3" class="c2"></div>

</body>
</html>
html文件
• id选择器:
语法:
$("#id")                    // 不管找什么标签,用什么选择器,都必须要写$("")
示例:
$("#d1");              //获取到id=d1的所有标签

• 标签选择器:
语法:
$("tagName")           // 通过标签名字查找对应标签
示例:
$("div");                  // 获取所有div标签

• class选择器:
语法:
$(".className")          // 通过标签的类名查找对应标签
示例:
$(".c1");                  // 获取所有class=c1的标签

• 配合使用:
语法:
$("div.c1")               // 找到有class=c1类的div标签
示例:
$("div.c1");              // 找div标签,条件:类名为c1

• 所有元素选择器:
语法:
$("*")                      // html所有标签有效,查找所有标签

• 组合选择器:
语法:
$("#id, .className, tagName")          // 通过组合(id,类名,标签名)查找标签
示例:
$("#d1, .c2");           // 查找id=d1,class=c2的所有标签

五、jQuery基础语法(层级选择器)

注意:x和y可以为任意选择器((同css))
语法:
$("x y");                   // x的所有后代y(子子孙孙)
$("x > y");                // x的所有儿子y(儿子)
$("x + y");                // 找到所有紧挨在x后面的y
$("x ~ y");                // x之后所有的兄弟y

示例:
$(".c1 div");              // 找到class=c1标签下的所有div标签
$(".c1 > div");           // 找到class=c1标签下所有儿子标签(第二层子标签)div标签
$(".c1 + p");             // 找到class=c1标签下的毗邻标签p
$(".c1 + div");           // 找到class=c1标签下的所有div标签

六、jQuery基础语法(基本筛选器)

选择之后进行过滤

  
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="jquery-3.4.1.js"></script>

<div>
    <ul>
        <li id="d1">1</li>
        <li id="d2">2
            <p>222</p>
            <h1>h标签</h1>
        </li>
        <li>3</li>
        <li id="d3">4</li>
        <li class="c1">5</li>
    </ul>
</div>

<div class="c2">
    <p>hello</p>
</div>

</body>
</html>
html文件
语法:
:first                        // 第一个
:last                         // 最后一个
:eq(index)                  // 索引等于index的那个元素
:even                       // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd                         // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)                  // 匹配所有大于给定索引值的元素
:lt(index)                    // 匹配所有小于给定索引值的元素
:not(元素选择器)         // 移除所有满足not条件的标签
:has(元素选择器)           // 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

示例:
$("ul li");                  // 查找ul标签下的所有li标签
$("li:first");               // 找到第一个li标签
$("li:last");               // 找到最后一个li标签
$("li:eq(2)");            // 找到下标索引为2的标签
$("li:even");             // 找到为偶数的所有标签
$("li:odd");              // 找到为奇数的所有标签
$("li:gt(2)");              // 找到下标索引大于2的所有标签
$("li:lt(2)");              // 找到下标索引小于2的所有标签
$("li:odd");              // 找到为奇数的所有标签
$("div:has(h1)")       // 找到所有后代中有h1标签的div标签,意思是首先找到所有div标签,把这些div标签的后代中有h1的div标签筛选出来
$("div:has(.c1)")      // 找到所有后代中有c1样式类(类属性class='c1')的div标签
$("li:not(.c1)")         // 找到所有不包含c1样式类的li标签
$("li:not(:has(h1))")   // 找到所有后代中不含h1标签的li标签

七、jQuery基础语法(  属性选择器)

语法:
[attribute]
[attribute=value]     // 属性等于
[attribute!=value]    // 属性不等于

示例:
// 示例,多用于input标签
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签

八、jQuery基础语法(表单筛选器)

多用于找form表单里面出现的input标签,当然通过属性选择器找肯定也是没问题的,这样就是写着简单一些

  
html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="jquery-3.4.1.js"></script>

<div class="c1">
    <form action="">
        <input type="text">
        <input type="text" disabled>
        <input type="checkbox" name="hobby">篮球
        <input type="checkbox" name="hobby" checked>足球
    </form>
</div>


</body>
</html>
html文件
语法:
:text                  // 单行输入文本
:password          // 密码输入框
:file                   // 文本选择框
:radio                // 单选框
:checkbox          // 复选框
:submit             // 提交按钮
:reset                // 重置按钮
:button             // 普通按钮

表单对象属性:
:enabled           // 使能
:disabled          // 失能
:checked          // 单选&多选默认选中
:selected          // select标签默认选中


示例:
$("input:text")           // 找到所有的text
$("input:checked");    // 找到所有的checked
$("input:disabled")     // 找到不可用的input标签

九、jQuery基础语法(筛选器方法)

  
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script src="jquery-3.4.1.js"></script>

<div class="c3">
    <div class="c2">标签1</div>
    <div class="c2">标签1</div>
    <div class="c1">标签2</div>
</div>

</body>
</html>
html文件
注意:
选择器或者筛选器选择出来的都是对象,而筛选器方法其实就是通过对象来调用一个进一步过滤作用的方法

示例:查找下一个元素
$("#id").next()                          // 找到下一个元素
$("#id").nextAll()                      // 找后面的所有元素
$("#id").nextUntil("#i2")            // 直到找到id为i2的标签就结束查找,不包含它

示例:查找上一个元素
$("#id").prev()                          // 找到上一个元素
$("#id").prevAll()                       // 找前面的所有元素
$("#id").prevUntil("#i2")             // 直到找到id为i2的标签就结束查找,不包含它

示例:父亲元素
$("#id").parent()                      // 查找当前元素的父辈元素
$("#id").parents()                    // 查找当前元素的所有的父辈元素(爷爷辈、祖先辈都找到)
$("#id").parentsUntil('body')     // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止,这里直到body标签,不包含body标签,基本选择器都可以放到这里面使用。

示例:儿子和兄弟元素
$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们,不包含自己,.siblings('#id'),可以在添加选择器进行进一步筛选

示例:查找元素
注意:搜索所有与指定表达式匹配的元素
$("div").find("p")                     // 找到div标签下的所有p标签元素(等价于$("div p"))

示例:筛选元素
筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式
$("div").filter(".c1")                 // 从结果集中过滤出有c1样式类的,从所有的div标签中找出有class='c1'属性的div(等价于:过滤 $("div.c1")的标签)

补充:
.first()           // 获取匹配的第一个元素
.last()            // 获取匹配的最后一个元素
.not()            // 从匹配元素的集合中删除与指定表达式匹配的元素
.has()            // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq()             // 索引值等于指定值的元素

示例:
$("div").first()         // 第一个div标签
$("div").last()         // 最后一个div标签
$("div").not(".c2")   // 找到除class=c2的所有div标签
$("div").has(".c2")   //  找到class=c2的所有div标签
$("div").eq(2)         // 找到索引为2的div标签

十、操作标签(class操作)

• 样式操作:
注意:
样式类(添加删除class类的值来修改样式)
语法:
addClass();         // 添加指定的CSS类名。
removeClass();    // 移除指定的CSS类名。
hasClass();          // 判断样式存不存在
toggleClass();      // 切换CSS类名,如果有就移除,如果没有就添加。

示例:
$("div").addClass("c1");        // 在div标签中添加一个class= c1
$("div").removeClass("c1");        // 在div标签中删除一个c1类
$("div").hasClass("c1");              // 在div标签中是否存在c1,存在:true,不存在:false
$("div").toggleClass("c1");          // 如果div标签中有c1类有就移除,如果没有就添加。

十一、操作标签(修改样式)

语法:
css("属性", "");                                              // 设置单个样式
css({"属性1""值1""属性2""值2"});             // 设置多个样式
示例:
css("color","red")               //DOM操作:tag.style.color="red"

$("p").css("color", "red");   //将所有p标签的字体设置为红色
$("div").css({"color":"yellow", "width":"300px"});   //将所有div标签的字体设置为红色,边框宽度为300px

 十二、位置操作

注意:
.offset()方法:允许我们检索一个元素相对于文档(document)的当前位置
.position()方法: 获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离

语法:
offset()                 // 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()             // 获取匹配元素相对父元素的偏移,不能设置位置
$(window).scrollTop()           //滚轮向下移动的距离
$(window).scrollLeft()           //滚轮向左移动的距离

示例:
$(".c1").offset();                                     // 获取当前标签位置
$(".c1").offset({top:100, left:100});          // 当前标签相对与dom文档偏移位置

$(".c1").position();        // 获取相对于父级标签的偏移位置

$(window).scroll(function(e){$(window).scrollTop()})       // 滚轮事件scroll
$(window).scrollTop(); // $(window):dom对象转化程jquery对象,获取当前鼠标向下移动的位置
$(window).scrollTop(100); // 设置鼠标下滑移动的位置(100px),也叫屏幕溢出位置

十三、尺寸属性

语法:
height()                //盒子模型content的大小,就是我们设置的标签的高度和宽度
width()

innerHeight()        //内容content高度 + 两个padding的高度
innerWidth()

outerHeight()        //内容高度 + 两个padding的高度 + 两个border的高度,不包括margin的高度,因为margin不是标签的,是标签和标签之间的距离
outerWidth()


示例:

$(".c1").height();            // 当前标签的content高度
$(".c1").width();             // 当前标签的content宽度

$(".c1").innerHeight();    // 当前标签的content高度 + 2* padding高度
$(".c1").innerWidth();     // 当前标签的content宽度 + 2* padding宽度

$(".c1").outerHeight();    // 当前标签的content高度 + 2* padding高度 + 2* border高度
$(".c1").outerWidth();     // 当前标签的content宽度 + 2* padding宽度 + 2* border宽度

十四、文本操作

  
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="c1">
    <input type="text">

    <input type="checkbox" value="basketball" name="hobby">篮球
    <input type="checkbox" value="football" name="hobby">足球

    <select id="s1">
        <option value="1">北京</option>
        <option value="2">上海</option>
        <option value="3">深圳</option>
    </select>
</div>

<script src="jquery-3.4.1.js"></script>
<script>

</script>

</body>
</html>
html文件
语法:
HTML代码:
html()            // 取得第一个匹配元素的html内容,包含标签内容
html(val)        // 设置所有匹配元素的html内容,识别标签,能够表现出标签的效果

文本值:
text()           // 取得所有匹配元素的内容,只有文本内容,没有标签
text(val)       // 设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去


示例:
$(".c1").text("123")           // 设置当前标签的文本内容为:123
$(".c1").text();                 // 获取当前标签的文本内容

$(".c1").html("123");                       // 设置当前标签的文本内容为:123
$(".c1").html("<a>百度</a>");        // 通过字符串形式创建html标签
$(".c1").html();                               // 获取当前标签内容:"<a>百度</a>",此处是一个标签

注意:
radio&checkbox获取值操作,只能获取到第一标签的值,需要循环才能获取所有的值
checked能选中所有select和checkbox所有的标签

其他值操作:例如input&select&textarea操作
val()                       // 取得第一个匹配元素的当前值
val(val)                   // 设置所有匹配元素的值
val([val1, val2])       // 设置多选的checkbox、多选select的值

示例:
text标签:
$(":text").val();                 // 获取当前input标签的value值
$(":text").val("abc");          // 设置当前input标签的值为:"abc"

checkbox标签:
$("input[name = 'hobby']").val(["football"]);                       // $("input[name = hobby]").val(["football"]); 相同效果
$("input[name = hobby]").val(["basketball","football"]);       // 设置多个选择

$(":checked:checked").val();                                              // 这样的方式获取值,只能获取到第一值,需要通过循环获取值
radio&checkbox获取值:
for(var i=0;i<$(':checkbox:checked').length;i++){console.log($(":checkbox:checked").eq(i).val())}    // 通过for循环获取选择的值

select标签:
$("#s1").val();            // 获取当前select标签的value值(也可获取多个值)
$("#s1").val("1");        // 选中value="1"的标签
$("#s1").options[this.selectedIndex].innerText; // 根据索引取值

十五、属性操作

注意:
在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。

语法:
用于自带属性等或自定义属性
attr(attrName)                        // 返回第一个匹配元素的属性值
attr(attrName, attrValue)         // 为所有匹配元素设置一个属性值
attr({k1: v1, k2:v2})              // 为所有匹配元素设置多个属性值
removeAttr(attrName)            // 从匹配的元素中删除一个属性

用于checkbox和radio:
prop()                                  // 获取属性

示例:
$(".c1").attr("age","18");             // 添加一个类属性:age="18"
$(":checkbox").attr("checked","checked");          // checkbox添加checked属性
$(':checkbox').eq(0).attr('checked','checked');     // 指定第一个标签添加checked属性

$(".c1").attr("age");                    // 查看类属性:age

$('.c1').attr({'k1':'v1','k2':'v2'})    // 添加多个类属性

$('.c1').removeAttr('age')            // 删除类属性:age


prop示例:
$(':checkbox').eq(0).prop('checked');               // 标签属性存在则返回true,否则为false

$(':checkbox').eq(0).prop('checked',true);        // 添加标签的checked属性(false为取消属性)
$(':radio').eq(0).prop('checked',true);              // radio标签


扩展:
prop和attr的区别:
attr全称attribute(属性) 
prop全称property(属性)
虽然都是属性,但他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性,可以认为attr是显式的,而prop是隐式的。
prop不支持获取标签的自定义属性

示例:
<input type="checkbox" checked id="i1" value="1" me="自定义属性">

$("#i1").attr("me")             // "自定义属性"
$("#i1").prop("me")           // undefined

总结一下:
1.对于标签上有的能看到的属性和自定义属性都用attr
2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。

十六、文档属性

• 添加到指定元素内部的后面:
语法:
$(A).append(B)             // 把B标签追加到A标签内部子标签的后面(append(a),例子(标签的字符串拼接):a="<a>"+"数据”+"</a>")
$(A).appendTo(B)         // 把A标签追加到B标签内部子标签的后面

示例:
var a = document.createElement("a");      // 创建一个a标签
$(a).attr("href", "http://www.baidu.com");   // 添加一个href属性
$(a).text("百度")   // 添加文本属性

$('#d1').append(a)             // 添加标签a到标签#d1的标签最后面
$(a).appendTo('#d1')         // 同上,写法不同而已


• 添加到指定元素内部的前面:
语法:
$(A).prepend(B)               // 把B标签追加到A标签内部子标签的前面
$(A).prependTo(B)           // 把B标签追加到A标签内部子标签的前面

示例:
$('#d1').append(a)             // 添加标签a到标签#d1的标签最前面
$(a).appendTo('#d1')         // 同上,写法不同而已


• 添加到指定元素外部的后面:
语法:
$(A).after(B)                      // 把B标签追加到A标签外部毗邻位置
$(A).insertAfter(B)             // 把A标签追加到B标签外部毗邻位置

示例:
$("#d1").after(a);               // 把a标签放在#d1标签后面(同一级)
("#d1").insertAfter(a);        // 把a标签放在#d1标签前面(同一级)


• 添加到指定元素外部的前面:
语法:
$(A).before(B)                  // 把B放到A的前面
$(A).insertBefore(B)          // 把A放到B的前面

示例:
$("#d1").before(a);               // 把a标签放在#d1标签前面(同一级)
("#d1").insertBefore(a);        // 把a标签放在#d1标签后面(同一级)


• 移除和清空元素:
语法:
remove()                // 从DOM中删除所有匹配的元素。
empty()                  // 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还在

示例:
$("#d1").empty();       // 清空匹配元素下的所有子元素,匹配元素保留
$("#d1").remove();     // 删除匹配元素及所有子元素


• 替换:
语法:
$(A).replaceWith(B)           // B标签替换掉A标签
$(A).replaceAll(B)             // A标签替换掉B标签

示例:
$('#d1').replaceWith(a)          // 用a标签替换前面的匹配的元素标签#d1
$(a).replaceAll("#d1");          // 用a标签替换前面的匹配的元素标签#d1

十七、克隆

语法:
clone()        // 参数
  
示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>克隆</title>
  <style>
    #b1 {
      background-color: deeppink;
      padding: 5px;
      color: white;
      margin: 5px;
    }
    #b2 {
      background-color: dodgerblue;
      padding: 5px;
      color: white;
      margin: 5px;
    }
  </style>
</head>
<body>

<button id="b1">屠龙宝刀,点击就送</button>
<hr>
<button id="b2">屠龙宝刀,点击就送</button>

<script src="jquery-3.4.1.js"></script>
<script>
  // clone方法不加参数true,克隆标签但不克隆标签带的事件
  $("#b1").on("click", function () {
    $(this).clone().insertAfter(this);
  });
  // clone方法加参数true,克隆标签并且克隆标签带的事件
  $("#b2").on("click", function () {
    $(this).clone(true).insertAfter(this);
  });
</script>
</body>
</html>
实例

十八 、事件

  18.1 事件绑定:

注意:
input事件只能通过on方法绑定
事件:ev
keydown和keyup事件(键盘按键按下和抬起的事件,还有一些其他的key事件)组合示例:按住shift实现批量操作

语法:
.on( events [, selector ],function(){})
1.events: 事件
2.selector: 选择器(可选的)
3.function: 事件处理函数

方法:
click(function(){...})                 // 鼠标点击事件
hover(function(){...})               // 光标选中
blur(function(){...})                 // 取消光标选中
focus(function(){...})               // 聚焦事件 input等
change(function(){...})             //内容发生变化,input,select等
keyup(function(){...})              // 键盘事件

mouseover 和 mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者移动到子标签时会连续触发,mmouseenter事件不管有没有子标签都只触发一次,表示鼠标进入这个对象

input事件:只要input框里面的值发生变化就触发某个事件,注意input事件不能直接绑定,必须用on绑定才行($('#d1').on('input',function(){}))
• 鼠标点击事件(click):
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: green;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>

<div class="c1">

</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    // 标签对象.onclick = function
    $('.c1').click(function () {
    // this是dom对象
    $(this).css('background-color','pink');
    })

</script>
</body>
</html>
鼠标点击事件(click)
• hover事件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            border: 1px solid red;
            height: 200px;
            width: 200px;
        }
        .c2{
            background-color: yellow;
        }
    </style>
</head>
<body>


<div class="c1">

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    $('.c1').hover(
        function () {
            $(this).addClass('c2')     // 鼠标进入事件
        },
        function () {
            $(this).removeClass('c2')  // 鼠标离开事件
        }
    );
</script>
</body>
</html>
hover事件
• 光标的聚焦和失去焦点事件示例(input标签):
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c2 {
            background-color: yellow;
        }
    </style>
</head>
<body>

用户名:<input type="text" id="username">


<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    $('#username').focus(function () {    // 获取焦点后触发的事件
        $(this).addClass('c2')
    });

    $('#username').blur(function () {     // 失去焦点后触发的事件
        $(this).removeClass('c2')
    });

</script>
</body>
</html>
focus + blur事件
• 内容改变事件(change)示例(select标签):
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            border: 1px solid red;
            height: 200px;
            width: 200px;
        }
        .c3{
            background-color: red;
        }

    </style>
</head>
<body>


<div class="c1"></div>

<select name="" id="s1">
    <option value="1">北京</option>
    <option value="2">上海</option>
    <option value="3">深圳</option>
</select>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    // 选择的内容出现变化,触发change事件
    $('#s1').change(function () {
         $('.c1').toggleClass('c3')
    });

</script>
</body>
</html>
内容改变事件(change)示例(select标签)
• 键盘事件(keydown + keyup)示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    // 键盘按下事件
    $(window).keydown(function (e) {
        // console.log('xxx')
        // console.log(e.keyCode);     // 获取键盘的值
        if (e.keyCode === 16){
            console.log('按下了shift键')
        }
    });

    // 键盘放开事件
    $(window).keyup(function (e) {
        // console.log('xxx')
        // console.log(e.keyCode);
        if (e.keyCode === 16){
            console.log('松开了shift键')
        }

    });

</script>
</body>
</html>
键盘事件(keydown + keyup)
• input输入事件:
注意:input事件只能on绑定
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

内容:<input type="text" id="i1">

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    // 绑定事件的第二种方式,input事件只能on绑定
    $('#i1').on('input',function () {
        console.log($(this).val());    // 获取输入框(input)的值

    })


</script>
</body>
</html>
input输入事件
• 鼠标事件(mouseover + mouseenter + mouseout):
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c4{
            border: 1px solid red;
            height: 200px;
            width: 200px;
        }
        .c5{
            background-color: blue;
            height: 60px;
            width: 60px;
        }
    </style>
</head>
<body>

<div class="c4">
    <div class="c5">

    </div>
</div>


<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    // mouseenter事件:
    // $('.c4').mouseenter(function () {
    //     console.log('进来了')
    // });

    // mouseover事件:
    $('.c4').mouseover(function () {
        console.log('进来了')
    });

    // mouseout事件:
    // $('.c4').mouseout(function () {
    //     console.log('出去了')
    // })

</script>
</body>
</html>
鼠标事件(mouseover + mouseenter + mouseout)
• scroll元素滚动事件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            background-color: #3f89ec;
            width: auto;
            height: 600px;
        }
        .div-1 {
            background-color: #B9B5A8;
        }
        .div-2 {
            background-color: brown;
        }
        .div-3 {
            background-color: #b6976b;
        }
        .div-4 {
            background-color: #2b669a;
        }
        #btn {
            position: fixed;
            left: 20px;
            bottom: 20px;
        }
        .hide {
            display: none;
        }

    </style>
</head>
<body>

<span>顶部位置</span>

<div class="c1"></div>
<div class="c1 div-1"></div>
<div class="c1 div-2"></div>
<div class="c1 div-3"></div>
<div class="c1 div-4"></div>

<button id="btn">回到顶部</button>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    $(window).scroll(function () {              // 元素滚动事件scroll
        if($(window).scrollTop() > 1000)
            {$("#btn").removeClass("hide")}
        else {
            {$("#btn").addClass("hide")}
        }
    })

    $("#btn").click(function () {
        $(window).scrollTop(0);   // 鼠标移动位置设置到顶部
    })
</script>

</body>
</html>
scroll元素滚动事件

  18.2 移除事件:

注意:off() 方法移除用 .on()绑定的事件处理程序。
语法:
.off( events [, selector ][,function(){}])
1.events: 事件
2.selector: 选择器(可选的)
3.function: 事件处理函数

示例:
$("li").off("click");          // 移除li标签的click事件
实例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>

<div class="c1">
</div>

<script src="jquery-3.4.1.js"></script>
<script>
    // 创建.c1标签的click事件
    $(".c1").click(function () {
        alert("我是父标签");
    });

    // 移除.c1标签的click事件,此时设置的事件无效
    $(".c1").off("click");

</script>

</body>
</html>
实例

  18.3  事件冒泡与解决事件冒泡:

事件冒泡 :当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window 。(注意这里传递的仅仅是事件 并不传递所绑定的事件函数。所以如果父级没有绑定事件函数,就算传递了事件 也不会有什么表现 但事件确实传递了。)


• 阻止后续事件执行(解决事件冒泡):
1. return false;                      // 常见阻止表单提交等,如果input标签里面的值为空就组织它提交,就可以使用这两种方法
2. e.stopPropagation();          // 用事件对象的这个方法就能阻止冒泡 (e:事件)
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1, .c2 {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>

<div class="c1">
    <div class="c2"></div>
</div>

<script src="jquery-3.4.1.js"></script>
<script>
    // 父级标签设置click事件
    $(".c1").click(function () {
        alert("我是父标签");
    })

    // 子标签设置click事件,点击子标签事件后,因为事件冒泡机制,点击设置的click事件,事件发生会从子标签内部、
    // 一层一层往父级标签依次判断,有click事件都会执行,造成事件冒泡机制
    $(".c2").click(function (e) {
        alert("我是子标签");

        // 方式一:
        // return false             // 阻止事件冒泡
        // 方式二:
        e.stopPropagation();        // 通过用事件对象的方法来阻止事件冒泡
    })
</script>

</body>
</html>
解决事件冒泡

  18.4 事件委托:

• 注意:
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件,将未来添加进来的某些子标签自动绑定上事件

示例:
//中间的参数是个选择器,前面这个$('table')是父级标签选择器,选择的是父级标签,意思就是将子标签(子子孙孙)的点击事件委托给了父级标签
//但是这里注意一点,你console.log(this);你会发现this还是触发事件的那个子标签

$("table").on("click", ".delete", function () {})      // table:祖先标签,delete:子孙标签
实例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>

<div class="c1">
    <button id="btn">点我</button>
</div>

<script src="jquery-3.4.1.js"></script>
<script>
    // 父级标签设置click事件,子标签通过事件委托,让父级标签事件帮子标签响应事件
    $(".c1").on("click", "#btn", function () {
        alert("我是子标签button按钮")
    })
</script>

</body>
</html>
View Code

十九、页面载入(ready)

注意:
当DOM载入就绪可以查询及操纵时绑定一个要执行的函数,极大地提高web应用程序的响应速度

ready与window.onload区别:
ready特点:
jQuery的这个入口函数在文档加载完就触发,且不存在覆盖问题(建议使用)

window.onload特点:
1、window.onload会等到页面上的文档、图片、视频等所有资源都加载完才执行里面的js代码,导致有些效果的加载比较慢
2、onload()函数存在覆盖现象(多个文件导入时,后引入的文件会把前面引入的文件的window.onload里面的js代码全部覆盖掉,那么第一个文件的js代码就失去了效果)


语法:
$(document).ready(function(){})               //  方式一
$(function(){})                                        // 方式二(简写)
实例:
html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1,.c3{
            width: 100px;
            height: 100px;
            background-color: red;
        }
        .c3 {
            background-color: deeppink;
        }
        .c2{
            background-color: black;
        }

    </style>

</head>
<body>

<div class="c1"></div>
<div class="c3"></div>

<script src="jquery-3.4.1.js"></script>
<script src="页面载入.js"></script>

<script>
    // 页面载入
    $(function () {
        $('.c1').click(function () {
            $(this).addClass('c2');
        });
    });
</script>


</body>
</html>

js文件:
$(function () {
    $('.c3').click(function () {
        $(this).addClass('c2');
    });
});
实例

二十、动画效果

语法:
// 基本
show([s,[e],[fn]])             //show(5000),就是5秒之后显示出来这个标签,并且有一个动画效果,(搞个img图片看看效果),后面两个参数先不用管
hide([s,[e],[fn]])              // 隐藏
toggle([s],[e],[fn])           //这几个toggle的意思就是你原来是什么效果,我就反着来

示例:
$('.c1').show()                 // 马上显示
$('.c1').show(2000)          // 2s后显示标签
$('.c1').hide()
$('.c1').hide(2000)


// 滑动(拉窗帘一样)
slideDown([s],[e],[fn])  
//使用的时候别忘了给标签设置一个高度和宽度,其实就是控制你的标签高度,如果你写$('#di').slideUp(5000);意思就是5秒内把你的高度变为0
//还有如果你直接操作的是img标签和操作img标签的父级标签,两个的效果是不同的
slideUp([s,[e],[fn]]) 
slideToggle([s],[e],[fn])

示例:
$('.c1').slideDown()                 // 马上滑动显示
$('.c1').slideDown(2000)          // 2s后滑动显示标签
$('.c1').slideUp()
$('.c1').slideUp(2000)


// 淡入淡出(控制透明度)
fadeIn([s],[e],[fn])
fadeOut([s],[e],[fn])
fadeTo([[s],o,[e],[fn]])  o参数是透明度,0-1的区间,意思是淡入或者淡出到一个多大的透明读
fadeToggle([s,[e],[fn]])

示例:
$('.c1').fadeTo(2000, 0.5)          // 2s后淡入,0.5的透明度

// 自定义(了解即可)
animate(p,[s],[e],[fn])

二十一、each方法

描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1。其他对象通过其属性名进行迭代。
语法:
jQuery.each(collection, callback(indexInArray, valueOfElement)):

示例一:
描述:循环迭代一个数组(array):
li =[10,20,30,40]
$.each(li,function(i, v){  
  console.log(i, v);                   // function里面可以接受两个参数,i是索引,v是每次循环的具体元素。
  if(i === 2) { return;}            // 判断条件:退出本次循环(return;),退出整个循环(return false;),此处没有continue和break语法
})


示例二:
描述:循环自定义对象: 
var d1 = {'name':'chao','age':18}
$.each(d1,function(k,v){console.log(k,v)})


示例三:
描述:遍历一个jQuery对象,为每个匹配元素执行一个函数
.each(function(index, Element)):           // 语法


$("li").each(function(){
  $(this).addClass("c1");              // 为每一个li标签添加foo
});

$(".u1 li").each(function(k,v) {console.log(k,v); if(k===2){return false;}});       // 遍历li标签,直到第三个结束循环

二十二、data()方法

描述:任意jQuery对象都有data方法,可以保存任意值,可以用来代替全局变量

语法:
.data(key, value)              // 设置值
.data(key)                       // 取值,没有的话返回undefined
.removeData(key)            // 移除存放在元素上的数据,不加key参数表示移除所有保存的数据

示例:
$("div").data("k",100);              // 给所有div标签都保存一个名为k,值为100
$("div").data("k");                    // 返回第一个div标签中保存的"k"的值
$("div").removeData("k");         // 移除元素上存放k对应的数据

$('tbody')).data('select',$('select'))       // 保存一个select标签

二十三、插件(创建扩展方法)

描述:
jQuery的命名空间下添加新的功能。多用于插件开发者向 jQuery 中添加新函数时使用。

语法:
jQuery.extend(object)                // 给jQuery对象添加一个方法
jQuery.fn.extend(object)            // 给任意的jQuery标签对象添加一个方法
示例(jQuery对象方法):
<script>
jQuery.extend({                                            //$.extend({})
  min:function(a, b){return a < b ? a : b;},      //自定义了一个min和max方法,min和max作为键,值是一个function
  max:function(a, b){return a > b ? a : b;}
});
jQuery.min(2,3);                    // => 2
jQuery.max(4,5);                   // => 5
</script>
jQuery对象方法
示例(jQuery对象的标签方法):
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="jquery-3.4.1.js"></script>

<div class="c1">
    <form action="">
        <input type="checkbox" checked>篮球
        <input type="checkbox">足球
        <input type="checkbox">羽毛球
    </form>
</div>


<script>
    $.fn.extend({
        check:function () {
            return this.each(function () {
                this.checked = true;
            });
        },
        uncheck:function () {
            return this.each(function () {
                this.checked = false;
            });
        }
    });

    // jQuery对象可以使用新添加的check()方法了。
    $("input[type='checkbox']").check();       // 选中
    $("input[type='checkbox']").uncheck();     // 取消选中
</script>

</body>
</html>
jQuery对象的标签方法

 

posted @ 2019-05-08 22:25  Amorphous  阅读(779)  评论(0编辑  收藏  举报