6. jQuery

1. 概念

  • jQuery是一个JavaScript函数库。jQuery是一个轻量级的"写的少,做的多"的javaScript库。
  • jquery包含如下功能
    • HTML元素提取并操作
    • CSS操作
    • HTML事件函数
    • JS特效和动画
    • HTML DOM遍历和修改
    • Ajax

2. 安装

  1. 可以从官网上下载 jQuery
  2. 使用
    jQuery 库是一个 JavaScript 文件,我们可以直接在 HTML中通过script 标签引用它即可。
 <head>
  	<script src="js/jquery-1.12.4.js"></script>
  </head>

3. 语法结构

  • jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作。
1. 说明:美元符号定义 jQuery($)  选择符(selector)"查询"和"查找" HTML 元素
2. 文档就绪事件,实际上就是文件加载事件。当文档加载完后再加载jQuery。
	$(document).ready(function(){
		...代码部分
	});
3. 文档就绪简写:$(function(){});
4. 区别: jQuery的ready方法与JavaScript中的onload相似,但是也有区别
	jquery.ready()可以执行多次,不会覆盖之前的执行。

4. 选择器

4.1 JS具备的

1. 标签选择器  $("div")
2. id选择器  	$("#p1")
3. class选择器	$(".mydiv")
4. *选择器		$("*")
5. 并集选择器		$("div,ul,table, .mydiv")
6. 后代选择器		$("form input")
7. 子类选择器		$("form > input")

4.2 相邻选择器

$("lable + input")//匹配所有 紧接 在label元素后的 input 元素

4.3 同辈选择器

$("prev ~ siblings") //匹配 prev 元素之后的所有 siblings 元素

4.4 属性选择器

1, $("input[id]")  //选中input中带有id的元素

2. $("input[name='accept']")  //选中 name="accept" 的input

3. $("input[name !='accept']")  //选中name不等于accept的input

4. $("input[name^='news']")  //选中开头为:news的元素

5. $("input[name$='letter']")		//选中结尾位letter的元素

6. $("input[name*='man']").attr('checked', true);		//选中包含man的元素

4.5 过滤选择器

1. $("li:first"); $("li:last")// 选取第一个li元素,  选取最后一个li元素

2. $("option:not(selected)")  //选取不是selected的元素
	$("input":not(checked)")  //选取不是checked的元素

3. $("li:odd"); $("li:even")  //选中下标为奇数(odd)和偶数(even)的元素

4. $("li:eq(1)");		//匹配一个等于1的索引的元素, 
	$("li:gt(1)");		//大于索引1的:gt(index)
	$("li:lt(1)");		//小于索引1的:lt(index)

5. $("td:parent");	//匹配含有 子元素或者文本的元素  解析:td作为父亲,看有没有孩子或内容

6.	$("tr:visible")  //匹配所有的可见元素(visible)和不可见的(hidden)

4.6 选择器 + 过滤函数

1. $("tr").eq(1);//先筛选tr标签,在匹配下标为1的元素
2. $("li").first()//同理:先筛选li标签,再选择li标签的第一个元素

3. filter(".class")滤波器
	$("p").filter(".selected")//保留class=”selected“的p元素

4. $("#div2").siblings("a"); //siblings:筛选与id=“div2”同级的a元素,不包括div2
	区别: 下面的是筛选li3后面的所有li
	$("#li3 ~ li"));

4.7 表单过滤器

1. //:input -->匹配所有input, textarea, select 和 button
2. //:text-->匹配所有的单行文本框  type="text"
	$(":text").css('color', 'red');

3. /*  - :password 匹配所有的密码框,以此类推
	- :radio
	- :checkbox
	- :submit
	- :image
	- :reset
	- :button
	- :file
*/

4. /*  选中情况
	- :selected  匹配所有 被选中 的下拉列表元素
	- :checked   匹配所有 被选中 的复选框元素

	- :disable 匹配所有不可用元素
	- :enable 匹配所有可用元素
	- :hidden 匹配所有不可见元素 or type=hidden的元素
*/

//选择复选框且被选中状态$(":checkbox:checked")

4.8 重要知识

1. 复合选择器: $("input[value][name $='letter']");//选中具有value且name尾部=”letter“的input元素
2. JS -- >jQuery:	添加$() 如:$(this) 
3. jQuery --> JS: 使用索引$(this)[0];

5. 常用函数

5.1 操作内容

1. var str1 = $("div").html();//获取第一个div元素的内容
2. var str2 = $("div").text();//获取第一个div元素的纯文本,不包含标签的内容
3. var str3=$("div").val(); //只能用在表单项目中,
4. var str4=$("input").val();//获取input元素的value值
	$("#txt").val("hello world")//设置id="txt"的value=“hello world”;

5.2 操作属性

1. $("h1").html("<span style='color: red'>new1</span>");//添加并执行内容
2. $("h2").text("<span style='color: red'>new2</span>)");//添加纯文本

3. $("ul").addClass("a").addClass("b");//为每个匹配的元素添加指定的类名。
4. $("ul").toggleClass("c");//如果存在(不存在)就删除(添加)一个class=“c”类
	$("p").removeClass("selected");//从匹配的元素中删除 'selected' 类
	$("div").removeClass();//删除匹配元素的所有类

5. $("#txt").attr("name")//返回txt的name的值
	$("#txt").prop("name")//prop不会产生错误,推荐使用

5.3 操作样式

$("input").css("border-color","blue");//改变一个样式
$("input").css({"color":"red","border-color":"green"});//改变多个需要使用JSON格式

6. 事件

6.1 常用的事件

鼠标事件键盘事件表单事件文档事件
clickkeydownsubmitload
dblclickkeyupchange
mouseoverfocus
mouseoutblur

6.2 事件方法

1. 给所有的button绑定单击事件
	$("button").click(function(){
		alert(this);//this是当前对象,哪个按钮触发的单击事件this就是那个按钮,this此时是JS对象
2. /*捆绑
	- on
	- live 高版本不再使用
	- bind
*/
	$("#btn1").on("click", function () {
		$("body").append('<div class="clickme">Another target</div>')
	});	//不会出现 JS中的覆盖下现象
	$("#btn1").bind("click", function(){
	   $("body").append('<div class="clickme">Another target</div>')
	});

3. 绑定一个 一次性事件 -->one
	$("#btn1").one('click', function () {
		alert('click one');
	})

4. 当键盘被按下时,发生 keypress 事件。
	$("#txt").keypress(function (event) {
		if (event.keyCode == 13) {
			alert('回车')
		} else {
			alert('other');
		}
	});

5. 当元素的值发生改变时,会发生 change 事件 --> $(selector).change();
   注意:该事件仅适用于text、password、checkbox、redio、textarea、select。
   1)用于 select 元素时,change 事件会在选择某个选项时发生。
   2)用于 text 或 textarea 时,该事件会在元素失去焦点时发生。

7. 操作文档DOM

7.1 元素增加

常用的元素增加的方法:
1. append() - 在 被选元素内 的结尾插入内容,prepend()在被选元素内的前面插入内容
2. appendTo() - 被选择的元素添加到后面的元素中	
3. after() - 在被 选元素外 的后面插入内容
4. before() - 在 被选元素外 的前面插入内容

举例
1. <p>I would like to say: </p>
	$("p").append("<b>添加粗体标签</b>")
	运行结果 <p>  I would like to say:<b>添加粗体标签</b> </p> 

2. <p>I would like to say: </p>  <div></div>  <div></div>
   $("p").appendTo("div")  <!--将p标签添加到div标签中-->
	运行结果:<div><p>I would like to say: </p></div>
      		<div><p>I would like to say: </p></div>
3. <p>I would like to say: </p>
	$("p").after("<b>添加粗体标签</b>") 
	运行结果:<p>I would like to say: </p> <b>Hello</b>

4. <p>I would like to say: </p>
	$("p").before("<b>添加粗体标签</b>")
	运行结果:<b>Hello</b> <p>I would like to say:</p> 

7.2 元素删除

常用的元素删除的方法:
1. remove() - 删除被选元素(及其子元素)
2. empty() - 删除匹配的元素集合中所有的子节点。//包括内容 + 子节点,被选中元素不做删除

案例展示:
1. <p class="hello">Hello</p> how are <p>you?</p>
	$("p").remove() --> how are
	$("p").remove(".hello") --> how are <p>you?</p>
2. <p>Hello, <span>Person</span> <a href="#">and person</a></p>
	$("p").empty() --> <p></p>

8.效果

语法:1 2 3;
<head>
    <meta charset="UTF-8">
    <title>效果</title>
    <style>
        p {
            width: 400px;
            height: 300px;
            border: 1px solid red;
        }
        img {
            display: block;
        }
        .block {
            position: absolute;
            left: 500px;
            width: 100px;
            height: 30px;
            background-color: aqua;
        }
    </style>
    <script src="js/jquery-1.12.4.js"></script>//引入jquery
    <script>
        $(function () {
            $("#hideBtn").click(function () {
1.-->           $("img").hide(5000);//在5s内隐藏, 默认方式隐藏 对应: show()显示
2.-->           $("img").fadeOut(5000);//淡出隐藏,通过改变透明度来实现淡出,对应:fadeIn()淡入

3.-->                $("img").animate({ //用于创建自定义动画的函数。
                    height: 'toggle', opacity: 'toggle'
                }, "slow");
            });
            $("#go").click(function () {
                $("#block").animate({
                    width: "90%",
                    height: "100%",
                    fontSize: "10em",
                    borderWidth: 10
                }, 1000);
            });
            $("#showBtn").click(function () {
                // $("img").show(5000);
                $("img").fadeIn(5000);//在5s内完成显示
            });

            $("#right").click(function(){
                $(".block").animate({left: '+50px'}, "slow");
            });
            $("#left").click(function(){
                $(".block").animate({left: '-50px'}, "slow");
            });
        });
    </script>
</head>
<body>
<button id="hideBtn">hide</button>
<button id="showBtn">show</button>
<img src="../../img/游乐园.jpg" height="300" width="440"/>
<p>speed:三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)
    easing:(Optional) 用来指定切换效果,默认是"swing",可用参数"linear"
    fn:在动画完成时执行的函数,每个元素执行一次。显示隐藏的匹配元素。
    这个就是 'show( speed, [callback] )'
    无动画的版本。如果选择的元素是可见的,这个方法将不会改变任何东西。无论这个元素是通过hide()方法隐藏的还是
    在CSS里设置了display:none;,这个方法都将有效。
</p>
<button id="go"> Run</button>
<div id="block">Hello!</div>
<button id="left">«</button>
<button id="right">»</button>
<span class="block">block</span>
</body>
</html>

9. 工具

1. 将字符串转为JSON格式
	var s = '{"username": "rose", "password": "123"}';//这是一个字符串。
	var o = $.parseJSON(s);//将字符串转为JSON格式,前提:符合JSON的语法
	alert(o.username);

2. 执行脚本表达式 eval
	var o = eval('({"username": "abc"})');
	alert(o.username);
	
	alert("1 + 1");	//1 + 1
	alert(eval("1 + 1"));// 2


3. param: 将表单元素数组 或者对象 ‘序列化’。是.serialize()的核心方法。
	var attr = { width:1680, height:1050 };
	var str = $.param(attr);//序列化:可以提交
	alert(str);  //width=1680&height=1050
	//上面代码的实现
	alert($("#form").serialize());

10. 案例刨析

10.1 表格换色 + 全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表格换色</title>
    <script src="../../js/jquery-1.12.4.js"></script>
</head>
<body>
<!--注意:这里不再写body的HTML部分,详细请看上一篇md:JavaScript-->
<script>
    $(function () {
       //表格换色
        $("tr:even").css("backgroundColor", "grey");//选中下标为偶数的tr并修改样式
        $("tr:odd").css("backgroundColor", "antiquewhite");//选中奇数的tr元素

       //全选 全部选
        $("#checkAll").change(function () {//选中表头的复选框,当发生变化时,执行
            $(":checkbox[name='checkOne']").prop("checked", $(this).prop("checked"));
        });
    });
</script>
</body>
</html>

10.2 省市联动

<head>
    <meta charset="UTF-8">
    <title>省市联动</title>
    <script src="../../js/jquery-1.12.4.js"></script>
</head>
<body>
<!--选择省份-->
<select id="province">
    <option value="-1">--请选择--</option>
    <option value="0">广东省</option>
    <option value="1">湖南省</option>
    <option value="2">福建省</option>
</select>
<!--选择城市-->
<select id="city"></select>

<script>
    var provinces = [//使用二维数组
        ["深圳市", "东莞市", "惠州市", "广州市"],
        ["长沙市", "岳阳市", "株洲市", "湘潭市"],
        ["厦门市", "福州市", "漳州市", "泉州市"]
    ];
   
    $("#province").change(function () {//当下拉列表有被选中时发生
        var v = $("#province option:selected ").attr("value");//获取被选中的元素的value
        var citys = provinces[v];
        $("#city").html(" ");	//清空二级目录的内容
        for (var i = 0; i < citys.length; i++) {//给二级目录循环赋值.
            $("#city").append("<option>" + citys[i] + "</option>")}
    });
</script>
</body>
</html>

10.3 商品移动

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>商品右移</title>
    <script src="js/jquery-1.12.4.js"></script>
</head>
<body>
<!--注意:这里不再写body的HTML部分,详细请看上一篇md:JavaScript-->
<script>
   //商品右移
    $("#a1").click(function () {
        $("#leftSelect option:selected").appendTo($("#rightSelect"));
    });
    $("#a2").click(function () {
        $("#leftSelect option").appendTo($("#rightSelect"));
    });
   
   //商品左移
    $("#a3").click(function () {
        $("#rightSelect option:selected").appendTo($("#leftSelect"));
    });
    e
    $("#a4").click(function () {
        $("#rightSelect option").appendTo($("#leftSelect"));
    });
</script>
</body>
</html>

10.4 表单验证

<script>
   
   function isUserName() {
      var val = $("input[name='userName']").val();
      if (val == "") {
         $("span[id='userNameMsg']").html("用户名不能为空!").css("color", "red");
         return false;
      } else if (/^[a-zA-z]\w{5,}/.test(val) == false) {
         $("span[id='userNameMsg']").html("用户名不合法!").css("color", "red");
         return false;
      }
      $("span[id='userNameMsg']").html("用户名可用!").css("color", "green");
      return true;
   }

   function isPwd() {
      var val = $("input[name='pwd1']").val();
      if (val == "") {
         $("span[id='pwd1Msg']").html("密码不能为空!").css("color", "red");
         return false;
      } else if (val.length < 8) {
         $("span[id='pwd1Msg']").html("密码长度不合法!").css("color", "red");
         return false;
      }
      $("span[id='pwd1Msg']").html("密码格式正确!").css("color", "green");
      return true;
   }

   function isPwd2() {
      if ($("input[name='pwd1']").val() != $("input[name='pwd2']").val()) {
         $("span[id='pwd2Msg']").html("两次密码不一致!").css("color", "red");
         return false;
      }
      $("span[id='pwd2Msg']").html("OK!").css("color", "green");
      return true;
   }

   /*校验电话码格式-座机或者手机 */
   function isTelCode(str) {
      var reg = /^((0\d{2,3}-\d{7,8})|(1[345789]\d{9}))$/;
      if (reg.test(str)) {
         $("span[id='phoneMsg']").html("OK!").css("color", "green");
         return true;
      }
      $("span[id='phoneMsg']").html("电话格式不合法!").css("color", "red");
      return false;
   }

   /*校验邮件地址是否合法 */
   function IsEmail(str) {
      var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
      if (reg.test(str)) {
         $("span[id='emailMsg']").html("OK!").css("color", "green");
         return true;
      }
      $("span[id='emailMsg']").html("邮箱地址不合法!").css("color", "red");
      return false;
   }

   /*校验是否选择了性别*/
   function isGender() {
      var val = $("select[name='gender']").val();
      if (val == -1) {
         alert("请选择性别!");
         return false;
      }
      return true;
   }

   //页面加载事件
   $(function () {
      $("input[name='userName']").blur(function () {
         isUserName();
      });
      $("input[name='pwd1']").blur(function () {
         isPwd();
      });
      $("input[name='pwd2']").blur(function () {
         isPwd2();
      });
      $("input[name='phone']").blur(function () {
         isTelCode();
      });
      $("input[name='email']").blur(function () {
         IsEmail();
      });
      $("#myForm").submit(function () {
         return
         isUserName() && isPwd() && isPwd2() && isGender() && isTelCode() && IsEmail();
      });
   });
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值