jQuery

介绍

jQuery就是辅助 JavaScript 开发的 js 类库。

使用

<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script>
	$(function () { // 表示页面加载完成 之后,相当 window.onload = function () {}
		var $btnObj = $("#btnId"); // 表示按 id 查询标签对象
		$btnObj.click(function () { // 绑定单击事件
			alert("jQuery  的单击事件");
		});
	});
</script>

核心函数

$ 是 jQuery 的核心函数,能完成 jQuery 的很多功能。$()就是调用$这个函数

1、传入参数为 [ 函数 ] 时:

  • 表示页面加载完成之后。相当于 window.onload = function(){}

2、传入参数为 [ HTML 字符串 ] 时:

  • 会对我们创建这个 html 标签对象

3、传入参数为 [ 选择器字符串 ] 时:

  • $(“:#id 属性值”); id 选择器,根据 id 查询标签对象
  • $(“:标签名”); 标签名选择器,根据指定的标签名查询标签对象
  • $(“:.class 属性值”); 类型选择器,可以根据 class 属性查询标签对象

4、传入参数为 [ DOM 对象 ] 时:

  • 会把这个 dom 对象转换为 jQuery 对象

DOM对象和jQuery对象的区分

什么是DOM对象、jQuery对象

Dom对象

  • getElementById()
  • getElementsByName()
  • getElementsByTagName()
  • createElement()
	 [object HTML 标签名 Element]

JQuery 对象

  • 通过 JQuery 提供的 API 创建的对象
  • 通过 JQuery 包装的 Dom 对象
  • 通过 JQuery 提供的 API 查询到的对象
	[object Object]

jQuery对象的本质

jQuery 对象是 Dom对象的数组 + jQuery 提供的一系列功能函数。

jQuery对象和 Dom 对象使用区别

无法使用对方的属性和方法

Dom对象和 jQuery对象互转 (*重点)

Dom对象转化为 jQuery 对象

  • 先有 DOM 对象
  • $(DOM 对象) 就可以转换成为 jQuery 对象

jQuery 对象转为 dom 对象

  • 先有 jQuery 对象
  • $obj[下标] 取出相应的 DOM 对象

jQuery选择器(*重点)

基本选择器

写法含义
#ID根据 id 查找标签对象
.class根据给定的 class 查找标签对象
element根据标签名查找标签对象
*查到所有的元素
selector1,selector2,selectorN将每一个选择器匹配到的元素合并后一起返回
	p.myClass	//表示标签名必须是 p 标签,而且 class 类型还要是 myClass

层级选择器

写法名称含义
ancestor descendant后代选择器在给定的祖先元素下匹配所有的后代元素
parent > child子元素选择器在给定的父元素下匹配所有的子元素
prev + next相邻元素选择器匹配所有紧接在 prev 元素后的 next 元素
prev ~ sibings之后的兄弟元素选择器匹配 prev 元素之后的所有 siblings 元素

过滤选择器

基本选择器

写法含义
:first获取第一个元素
:last获取最后个元素
:not(selector)去除所有与给定选择器匹配的元素
:even匹配所有索引值为偶数的元素,从 0 开始计数
:odd匹配所有索引值为奇数的元素,从 0 开始计数
:eq(index)给定一个匹配索引值的元素
:gt(index)匹配所有大于给定索引值的元素
:lt(index)匹配所有小于给定索引值的元素
:header匹配如 h1, h2, h3 之类的标题元素
:animated匹配所有正在执行动画效果的元素

内容过滤器

写法含义
:contains(text)匹配包含给定文本的元素
:empty匹配所有不包含子元素或者文本的空元素
:parent匹配含有子元素或者文本的元素
:has(selector)匹配含有选择器所匹配的元素的元素

属性过滤器

写法含义
[attribute]匹配包含给定属性的元素。
[attribute=value]匹配给定的属性是某个特定值的元素
[attribute!=value]匹配所有不含有指定的属性,或者属性不等于特定值的元素。
[attribute^=value]匹配给定的属性是以某些值开始的元素
[attribute$=value]匹配给定的属性是以某些值结尾的元素
[attribute*=value]匹配给定的属性是以包含某些值的元素
[attrSel1] [attrSel2][attrSelN]复合属性选择器,需要同时满足多个条件时使用

表单过滤器

写法含义
:input匹配所有 input, textarea, select 和 button 元素
:text匹配所有文本输入框
:password匹配所有的密码输入框
:radio匹配所有的单选框
:checkbox匹配所有的复选框
:submit匹配所有提交按钮
:image匹配所有 img 标签
:reset匹配所有重置按钮
:button匹配所有 input type=button 按钮
:file匹配所有 input type=file 文件上传
:hidden匹配所有不可见元素 display:none 或 input type=hidden

表单对象属性过滤器

写法含义
:enabled匹配所有可用元素
:disabled匹配所有不可用元素
:checked匹配所有选中的单选,复选,和下拉列表中选中的 option 标签对象
:selected匹配所有选中的 option

元素筛选方法

写法含义
eq()获取给定索引的元素 功能跟 :eq() 一样
first()获取第一个元素 功能跟 :first 一样
last()获取最后一个元素 功能跟 :last 一样
filter(exp)留下匹配的元素
is(exp)判断是否匹配给定的选择器,只要有一个匹配就返回,true
has(exp)返回包含有匹配选择器的元素的元素 功能跟 :has 一样
not(exp)删除匹配选择器的元素 功能跟 :not 一样
children(exp)返回匹配给定选择器的子元素 功能跟 parent>child 一样
find(exp)返回匹配给定选择器的后代元素 功能跟 ancestor descendant 一样
next()返回当前元素的下一个兄弟元素 功能跟 prev + next 功能一样
nextAll()返回当前元素后面所有的兄弟元素 功能跟 prev ~ siblings 功能一样
nextUntil()返回当前元素到指定匹配的元素为止的后面元素
parent()返回父元素
prev(exp)返回当前元素的上一个兄弟元素
prevAll()返回当前元素前面所有的兄弟元素
prevUnit(exp)返回当前元素到指定匹配的元素为止的前面元素
siblings(exp)返回所有兄弟元素
add()把 add 匹配的选择器的元素添加到当前 jquery 对象中

jQuery的属性操作

写法含义
html()设置和获取起始标签和结束标签中的内容。 跟 dom 属性 innerHTML 一样。
text()设置和获取起始标签和结束标签中的文本。 跟 dom 属性 innerText 一样。
val()设置和获取表单项的 value 属性值,跟 dom 属性 value 一样

以上3个函数不传参数时用来获取,传了参数则用来设置

val()还可以同时设置多个表单项的选中状态

	// 批量操作单选
	$(":radio").val(["radio2"]);
	
	// 批量操作筛选框的选中状态
	$(":checkbox").val(["checkbox3","checkbox2"]);
	
	// 批量操作多选的下拉框选中状态
	$("#multiple").val(["mul2","mul3","mul4"]);
	
	// 操作单选的下拉框选中状态
	$("#single").val(["sin2"]);
	
	//一次性操作多个表单项
	$("#multiple,#single,:radio,:checkbox").val(["radio2","checkbox1","checkbox3","mul1","mul4","sin3"]
);
写法含义
attr()可以设置和获取属性的值,不推荐操作 checked、readOnly、selected、disabled 等等 ,还可以操作非标准的属性。比如自定义属性:abc,bbj
prop()可以设置和获取属性的值,只推荐操作 checked、readOnly、selected、disabled 等等
	//获取name的属性值
	alert($("checkbox:first").attr("name"));
	
	//设置name的属性值为abc
	$("checkbox:first").attr("name","abc");

	//获取复选框的选中状态        
	alert($(":checkbox").prop("checked"));
	
	//设置复选框的选中状态
	$(":checkbox").prop("checked",true);

练习:全选、全不选

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../../script/jquery-1.7.2.js"></script>
    <script type="text/javascript">

        $(function () {

            //全选/全不选
            $("#checkedAllBox").click(function () {
                //在事件的function中,有一个this对象,这个this对象是当前正在响应时间的dom对象
                $(":checkbox[name='items']").prop("checked", this.checked);
            })

            $("#checkedAllBtn").click(function () {
                $(":checkbox").prop("checked", true);

            })

            $("#checkedNoBtn").click(function () {
                $(":checkbox").prop("checked", false);

            })


            $("#checkedRevBtn").click(function () {
                $(":checkbox[name='items']").each(function () {
                    this.checked = !this.checked;
                })

                checkAll();
            })


            $("#sendBtn").click(function () {
               $(":checkbox[name='items']:checked").each(function () {
                   alert(this.value);
               });
            })

            //全部球类的点击事件
            $(":checkbox[name='items']").click(function () {
                checkAll();
            })

            function checkAll() {
                var allCount = $(":checkbox[name='items']").length;//全部球类复选框
                var checkedCount = $(":checkbox[name='items']:checked").length;//选中的球类复选框
                $("#checkedAllBox").prop("checked", allCount == checkedCount);
            }
        });

    </script>
</head>
<body>

<form method="post" action="">

    你爱好的运动是?<input type="checkbox" id="checkedAllBox"/>全选/全不选

    <br/>
    <input type="checkbox" name="items" value="足球"/>足球
    <input type="checkbox" name="items" value="篮球"/>篮球
    <input type="checkbox" name="items" value="羽毛球"/>羽毛球
    <input type="checkbox" name="items" value="乒乓球"/>乒乓球
    <br/>
    <input type="button" id="checkedAllBtn" value="全 选"/>
    <input type="button" id="checkedNoBtn" value="全不选"/>
    <input type="button" id="checkedRevBtn" value="反 选"/>
    <input type="button" id="sendBtn" value="提 交"/>
</form>

</body>
</html>

DOM的增删改

写法含义
a.appendTo(b)把 a 插入到 b 子元素末尾,成为最后一个子元素
a.prependTo(b)把 a 插到 b 所有子元素前面,成为第一个子元素

外部插入:

写法含义
a.insertAfter(b)得到 ba
a.insertBefore(b)得到 ab

替换:

写法含义
a.replaceWith(b)用 b 替换掉 a
a.replaceAll(b)用 a 替换掉所有 b

删除:

写法含义
a.remove();删除 a 标签
a.empty();清空 a 标签里的内容

练习:左右列表项的移动

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        select {
            width: 100px;
            height: 140px;
        }

        div {
            width: 130px;
            float: left;
            text-align: center;
        }
    </style>
    <script type="text/javascript" src="script/jquery-1.7.2.js"></script>
    <script type="text/javascript">

        $(function () {
            //选中添加到右边
            $("button:eq(0)").click(function () {
                $("select[name='sel01'] option:selected").appendTo($("select[name='sel02']"))
            })

            //全部选中添加到右边
            $("button:eq(1)").click(function () {
                $("select[name='sel01'] option").appendTo($("select[name='sel02']"))
            })

            //选中添加到左边
            $("button:eq(2)").click(function () {
                $("select[name='sel02'] option:selected").appendTo($("select[name='sel01']"))
            })

            //全部选中添加到左边
            $("button:eq(3)").click(function () {

                $("select[name='sel02'] option").appendTo($("select[name='sel01']"))
            })
        })

    </script>
</head>
<body>

<div id="left">
    <select multiple="multiple" name="sel01">
        <option value="opt01">选项1</option>
        <option value="opt02">选项2</option>
        <option value="opt03">选项3</option>
        <option value="opt04">选项4</option>
        <option value="opt05">选项5</option>
        <option value="opt06">选项6</option>
        <option value="opt07">选项7</option>
        <option value="opt08">选项8</option>
    </select>

    <button>选中添加到右边</button>
    <button>全部添加到右边</button>
</div>
<div id="rigth">
    <select multiple="multiple" name="sel02">
    </select>
    <button>选中删除到左边</button>
    <button>全部删除到左边</button>
</div>

</body>
</html>

练习:添加和删除记录

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Untitled Document</title>
    <link rel="stylesheet" type="text/css" href="styleB/css.css"/>
    <script type="text/javascript" src="../../script/jquery-1.7.2.js"></script>
    <script type="text/javascript">


        $(function () {

            $("#addEmpButton").click(function () {
                var name = $("#empName").val();
                var email = $("#email").val();
                var salary = $("#salary").val();

                var $trObj = $("<tr>" +
                    "<td>" + name + "</td>" +
                    "<td>" + email + "</td>" +
                    "<td>" + salary + "</td>" +
                    "<td><a href=\"deleteEmp?id=002\">Delete</a></td>" +
                    "</tr>");

                //为新添加的a标签单独添加点击事件
                $trObj.find("a").click(remove);

                $trObj.appendTo($("#employeeTable"));

            });

			//为初始化数据的a标签添加点击事件
            $("td a").click(remove)

            //当需要复用此函数时,只需要在调用方法中传入此方法名即可。
            function remove() {
                var $trObj = $(this).parent().parent();
                var name = $trObj.find("td:first").text();
                console.log(name);

                if (confirm("确定要删除" + name+"吗?")) {
                    $trObj.remove();
                }
                return false;
            }
        })


    </script>
</head>
<body>

<table id="employeeTable">
    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Salary</th>
        <th>&nbsp;</th>
    </tr>
    <tr>
        <td>Tom</td>
        <td>tom@tom.com</td>
        <td>5000</td>
        <td><a href="deleteEmp?id=001">Delete</a></td>
    </tr>
    <tr>
        <td>Jerry</td>
        <td>jerry@sohu.com</td>
        <td>8000</td>
        <td><a href="deleteEmp?id=002">Delete</a></td>
    </tr>
    <tr>
        <td>Bob</td>
        <td>bob@tom.com</td>
        <td>10000</td>
        <td><a href="deleteEmp?id=003">Delete</a></td>
    </tr>
</table>

<div id="formDiv">

    <h4>添加新员工</h4>

    <table>
        <tr>
            <td class="word">name:</td>
            <td class="inp">
                <input type="text" name="empName" id="empName"/>
            </td>
        </tr>
        <tr>
            <td class="word">email:</td>
            <td class="inp">
                <input type="text" name="email" id="email"/>
            </td>
        </tr>
        <tr>
            <td class="word">salary:</td>
            <td class="inp">
                <input type="text" name="salary" id="salary"/>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <button id="addEmpButton" value="abc">
                    Submit
                </button>
            </td>
        </tr>
    </table>

</div>

</body>
</html>

CSS样式操作

函数作用
addClass()添加样式
removeClass()删除样式,不添加参数时,默认移除所有样式
toggleClass()有就删除,没有就添加样式。
offset()获取和设置元素的坐标。

jQuery动画

基本动画

函数作用
show()将隐藏的元素显示
hide()将可见的元素隐藏。
toggle()可见就隐藏,不可见就显示。

以上动画方法都可以添加参数。
1、第一个参数是动画 执行的时长,以毫秒为单位
2、第二个参数是动画的回调函数 (动画完成后自动调用的函数)

	//以show()为例,其它方法同理
	$("#div1").show(2000,function () {
		alert("show finish");
	})

淡入淡出动画
基本动画

函数作用
fadeIn()淡入(慢慢可见)
fadeOut()淡出(慢慢消失)
fadeTo()在指定时长内慢慢的将透明度修改到指定的值。0 透明,1 完成可见,0.5 半透明
fadeToggle()淡入/淡出 切换
			//fadeTo()在指定时间内淡化到指定透明度
			$("#btn6").click(function(){
				$("#div1").fadeTo(1000,0.3,function () {
					alert("finish")
				})
			});	
			
			//fadeToggle()淡化切换  
			$("#btn7").click(function(){
				$("#div1").fadeToggle(1500);
			});	

练习:品牌展示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>品牌展示练习</title>
<style type="text/css">
* {
	margin: 0;
	padding: 0;
}

body {
	font-size: 12px;
	text-align: center;
}

a {
	color: #04D;
	text-decoration: none;
}

a:hover {
	color: #F50;
	text-decoration: underline;
}

.SubCategoryBox {
	width: 600px;
	margin: 0 auto;
	text-align: center;
	margin-top: 40px;
}

.SubCategoryBox ul {
	list-style: none;
}

.SubCategoryBox ul li {
	display: block;
	float: left;
	width: 200px;
	line-height: 20px;
}

.showmore , .showless{
	clear: both;
	text-align: center;
	padding-top: 10px;
}

.showmore a , .showless a{
	display: block;
	width: 120px;
	margin: 0 auto;
	line-height: 24px;
	border: 1px solid #AAA;
}

.showmore a span {
	padding-left: 15px;
	background: url(img/down.gif) no-repeat 0 0;
}

.showless a span {
	padding-left: 15px;
	background: url(img/up.gif) no-repeat 0 0;
}

.promoted a {
	color: #F50;
}
</style>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
	$(function() {
		$('li:gt(5):not(:last)').hide();

		$('div div a').click(function () {
			$('li:gt(5):not(:last)').toggle();

			if ($('li:gt(5):not(:last)').is(":hidden")) {
				$('div div').removeClass();
				$('div div').addClass('showmore');
				$('div div a span').text('显示全部品牌');

				$("li:contains('明基')").removeClass('promoted');

			}else{
				$('div a span').text('隐藏全部品牌');
				$('div div').removeClass();
				$('div div').addClass('showless');

				$("li:contains('明基')").addClass('promoted');
			}
			return false;
		})
	});
</script>
</head>
<body>
	<div class="SubCategoryBox">
		<ul>
			<li><a href="#">佳能</a><i>(30440) </i></li>
			<li><a href="#">索尼</a><i>(27220) </i></li>
			<li><a href="#">三星</a><i>(20808) </i></li>
			<li><a href="#">尼康</a><i>(17821) </i></li>
			<li><a href="#">松下</a><i>(12289) </i></li>
			<li><a href="#">卡西欧</a><i>(8242) </i></li>
			<li><a href="#">富士</a><i>(14894) </i></li>
			<li><a href="#">柯达</a><i>(9520) </i></li>
			<li><a href="#">宾得</a><i>(2195) </i></li>
			<li><a href="#">理光</a><i>(4114) </i></li>
			<li><a href="#">奥林巴斯</a><i>(12205) </i></li>
			<li><a href="#">明基</a><i>(1466) </i></li>
			<li><a href="#">爱国者</a><i>(3091) </i></li>
			<li><a href="#">其它品牌相机</a><i>(7275) </i></li>
		</ul>
		<div class="showmore">
			<a href="more.html"><span>显示全部品牌</span></a>
		</div>
	</div>
</body>
</html>


jQuery事件操作

	//原生加载
	window.onloiad = function(){
	
	}

	//jQuery加载
	$(function(){
	
	});

触发时间:
1、jQuery 的页面加载完成之后是浏览器的内核解析完页面的标签创建好 DOM 对象之后就会马上执行。
2、原生 js 的页面加载完成之后,除了要等浏览器内核解析完标签创建好 DOM 对象,还要等标签显示时需要的内容加载完成。

触发顺序:
1、jQuery 页面加载完成之后先执行
2、原生 js 的页面加载完成之后

执行次数
1、原生 js 的页面加载完成之后,只会执行最后一次的赋值函数。
2、jQuery 的页面加载完成之后,会把注册的 function 函数按照顺序全部执行。

jQuery中其它的处理方法

函数作用
click()它可以绑定单击事件,以及触发单击事件
mouseover()鼠标移入事件
mouseout()鼠标移出事件
bind()可以给元素一次性绑定一个或多个事件。
one()使用上跟 bind 一样。但是 one 方法绑定的事件只会响应一次。
unbind()跟 bind 方法相反的操作,解除事件的绑定
live()也是用来绑定事件。它可以用来绑定选择器匹配的所有元素的事件。哪怕这个元素是后面动态创建出来的也有效
				//使用bind绑定多个事件
				$("h5").bind("click mouseover mouseout",function () {
					console.log("已bind");
				})

				$('<h5 class="head">什么是jQuery?</h5>').appendTo($("#panel"));

				//使用live绑定事件,新创建的元素也有效
				$("h5").live("click",function () {
					console.log("已live");
				})

事件的冒泡

事件的冒泡是指,父子元素同时监听同一个事件。当触发子元素的事件的时候,同一个事件也被传递到了父元素的事件里去响应。

在子元素的事件函数体内中添加return false,可以阻止事件的冒泡传递

javaScript事件对象

事件对象,是封装有触发的事件信息的一个 javascript 对象。

	//原生javaScript对象获取
	window.onload = function () {
			document.getElementById("areaDiv").onclick = function (event) {
			console.log(event);
		}
	}
	//jQuery获取事件对象
	$(function () {
		$("#areaDiv").click(function (event) {
			console.log(event);
		});
	});

在给元素绑定事件的时候,在事件的 function( event ) 参数列表中添加一个参数,这个参数名,我们习惯取名为 event。
这个 event 就是 javascript 传递参事件处理函数的事件对象。

	//使用 bind 同时对多个事件绑定同一个函数
	$("#areaDiv").bind("mouseover mouseout",function (event) {
		if (event.type == "mouseover") {
			console.log(" 鼠标移入");
		} else if (event.type == "mouseout") {
			console.log(" 鼠标移出");
		}
	});

练习:图片跟随

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        body {
            text-align: center;
        }

        #small {
            margin-top: 150px;
        }

        #showBig {
            position: absolute;
            display: none;
        }
    </style>
    <script type="text/javascript" src="script/jquery-1.7.2.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#small").bind("mouseover mouseout mousemove", function (event) {
                if (event.type == "mouseover") {
                    $("#showBig").show();
                } else if (event.type == "mouseout") {
                    $("#showBig").hide();
                } else if (event.type == "mousemove") {
                    $("#showBig").offset({
                        left: event.pageX + 10,
                        top: event.pageY + 10
                    })
                }
            })
        });
    </script>
</head>
<body>

<img id="small" src="img/small.jpg"/>

<div id="showBig">
    <img src="img/big.jpg">
</div>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值