jQuery 尽量用双引号
一、jQuery 概述
1.jQuery 的概念
jQuery 又称为 JavaScript 库
j 就是 JavaScript, Query 就是查询的意思
是对原生JavaScript 的封装,内部都是用JavaScript 实现的
以前学的js 称为原生js代码
2.jQuery.min.js
当使用jQuery 时,先引入
production 生产过程 代码压缩过
development 开发过程 保留语法格式
3.jQuery 的入口函数
等页面DOM 元素加载完毕之后,再使用script js代码
1. $(document).ready(function() {
$("div").hide();
})
2. $(function() {
$("div").hide();
})
注意:
1.等着页面DOM结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成 jQuery实现了封装
2.相当于原生js 中的DOMContentLoaded
3.不同于原生js 中的load 事件时等页面文档、外部的js文件、css文件、图片加载完毕才执行内部代码
4.jQuery 顶级对象
1.$ 是jQuery 的别称
$(function(){}) = jQuery(function(){})
2.$ 也是jQuery的顶级对象
类似于原生原生js 中的window
把元素利用$包装成jQuery 对象,就可以调用jQuery 的方法
5.jQuery 对象和DOM 对象
1.DOM 对象
用原生js 获取来的对象就是DOM 对象
// myDiv 是DOM 对象
var myDiv = document.querySelector("div");
2.jQuery 对象
用原生js 获取来的对象就是DOM 对象
// $("div") 是一个jQuery 对象
$("div");
注意:
jQuery 对象的本质:是利用$ 对DOM 对象包装后产生的对象(伪数组形式存储)
jQuery 对象只能使用jQuery 方法,DOM 对象则使用原生的JavaScript 属性和方法
6.jQuery 对象和DOM 对象的相互转换
原因:因为原生js 比 jQuery更大,原生的一些属性和方法jQuery 是没有封装的
1.DOM 对象转换为jQuery 对象:
(1)$("video");
(2)var myVideo = document.querySelector("video");
$(myVideo); // 这里不加引号
2.jQuery 对象转换为DOM 对象
(1)[] 里面放索引号 索引号从0 开始
$("video")[0].play();
(2)get() 里面放索引号 索引号从0 开始
$("video").get(0).play();
二、jQuery API
1.jQuery 选择器
1.选择器
注意加引号 "" 或者 "" 都可以
$("#id") id 选择器
$(".class") 类选择器
$("div") 标签选择器
$("*") 全选选择器
$("div,p,li") 并集选择器
$("li.current") 交集选择器
$("ul>li") 子代选择器
$("ul li") 后代选择器
2.筛选选择器
$("ul li:first") ul 的第一个li
$("ul li:last") ul 的最后一个li
$("ul li:eq(2)") ul 里的索引号为2的li 索引号从0 开始
$("ul li:odd") ul 里的索引号为奇数的li 索引号从0 开始
$("ul li:even") ul 里的索引号为偶数的li 索引号从0 开始
3.筛选方法
$("li").parent() 查找最近一级的父级元素
$("li").parents() 查找所有祖先元素
$("ul").children("li") 相当于$("ul>li") 子代选择器
$("ul").find("li") 相当于$("ul li") 后代选择器
$(".first").siblings("li") 查找兄弟节点,不包括自己本身
$(".first").nextAll() 查找当前元素之后的所有的同辈元素
$(".last").prevAll() 查找当前元素之前的所有的同辈元素
$("div").hasClass("protected") 查找当前元素是否含有某个特定的类,如果有则返回true
$("ul li").eq(2) 相当于$("ul li:eq(2)"), index从0 开始
4.隐式迭代(重要)
遍历内部DOM 元素(伪数组形式存储)的过程叫做隐式迭代
给匹配到的<所有元素>进行循环遍历,执行相应的方法,而不是再用for 循环进行
5.排他思想
// 让相应索引号的图片显示
$("#content div").eq(index).show();
// 让其余的图片隐藏起来
$("#content div").eq(index).siblings().hide();
6.链式编程
$(this).css("color", "red");
$(this).siblings().css("color", "");
等同于
$(this).css("color", "red").siblings().css("color", "");
2.jQuery 样式操作
1.css属性操作
1.参数只写属性名,则是返回属性值
$(this).css("color");
2.通过("属性名","属性值") 来修改该属性的值
$("div").css("width","300px");
注意:
1.属性名要加引号
2.属性值如果是数字可以不用加单位,也可以不用加引号
3.可以通过对象的方式修改多个属性
$("div").css({
width: 300,
height: 300,
backgroundColor: "red" // 不是数字,需要加引号,
})
注意:
1.参数是对象的形式
2.属性名和属性值用冒号隔开
3.属性与属性之间用逗号隔开
4.属性名可以不用加引号
5.属性值如果是数字可以不用加单位,也可以不用加引号
6.如果是复合属性,必须采取驼峰命名法 如:backgroundColor
7.如果值不是数字,需要加引号
$("div").css("background","pink");
2.类样式方法
1.添加类
$("div").addClass("current");
2.删除类
$("div").removeClass("current");
3.切换类 (如果已经有该类,则移除;如果没有,则添加该类)
$("div").toggleClass("current");
注意:
1.Class 的C 必须用大写
2.操作类里面的参数不要加点
3.jQuery类操作addClass、removeClass、toggleClass 与原生js 中className 的区别
1.原生js 中className 会覆盖元素原先里面的类名
$.each({
name: "andy",
age: 18
}, function(index, element) {
console.log(index);
console.log(element);
})
注意:
1.$.each() 方法可用于遍历任何对象,主要用于数据处理, 比如数组、对象
2.里面的函数有两个参数:index 是每个元素的属性,domEle 是遍历内容(属性值)
2.创建元素
$("
页面有动画的回到顶部:
$("body,html").stop().animate({
scrollTop: 0
});
$(window).scroll(function(){ // 页面滚动事件触发
})
三、jQuery 事件
1.jQuery 事件注册(单个事件绑定)
语法:
element.事件(function(){});
如:
$("div").click(function(){
$(this).css("background","pink");
})
2.jQuery 事件处理(单个或多个事件绑定)
1.事件绑定
1.语法:
element.on(events,[selector],fn);
如:
1. 给同一个元素绑定不同的事件,且执行不同的操作
$("div").on({
mouseenter: function(){
$(this).css("background","skyblue");
},
click: function(){
$(this).css("background","purple");
}
})
2. 给同一个元素绑定不同的事件,且执行相同的操作
$("div").on("mouseenter mouseleave",function(){
$(this).toggleClass("current");
})
2.注意:
1.events: 一个或多个用空格分隔的事件类型,如"click" "keydown"
2.selector: 元素的子元素选择器
3.fn: 回调函数,即绑定在元素身上的侦听函数
3.优势:
1.可以给同一个元素绑定多个事件
2.可以实现事件委派操作
3.可以给未来动态创建的元素绑定事件
如:
$("ol").on("click","li",function(){
alert("11");
})
var li = $("
四、jQuery 其他方法
1.对象拷贝
把某个对象拷贝给另一个对象使用
语法: $.extend([deep],target,object1,[objectN]);
注意:
1.deep:如果设为true 为深拷贝,默认为false 浅拷贝
2.target:要拷贝的目标对象
3.object1:待拷贝到目标对象的对象
4.将object1 的值拷贝给 target
5.有相同的内容时,会进行覆盖; 内容不同的会进行相加
6.浅拷贝:是把原来的对象里面的复杂数据类型的地址拷贝给目标对象,修改目标对象会影响拷贝对象(指向同一个对象)
7.深拷贝:完全克隆(拷贝的是对象,而不是地址),修改目标对象不会影响拷贝对象(重新开辟了一个空间,指向不同的对象)
2.多库共存
1.如果是$ 符号冲突,就使用jQuery
2.如果$ 和jQuery 都会发生冲突,就使用自定义变量的方式
var myJQuery = jQuery.noConflict();
console.log(myJQuery("div")); // 此时的myJQuery 就相当于$ 和jQuery
3.jQuery插件
1.jQuery插件库 http://www.jq22.com/
jQuery之家 http://www.htmleaf.com/(推荐)
2.图片懒加载技术
当页面滑动到可视区域,再显示图片
使用jQuery插件库 EasyLazyload 注意:此时的js引入文件和js调用必须写到DOM元素(图片)最后面
(品优购案例已引入)
3.全屏滚动
gitHub: http://github.com/alvarotrigo/fullPage.js
中文翻译网站: http://www.dowebok.com/demo/2014/77/
ToDoList案例:
本地存储:页面刷新或关闭,不会丢失保存的数据
$(function(){
var todolist = [{
title: '第一天',
done: false
},{
title: '第二天',
done: false
}];
// 1.本地存储里面只能存储字符串的数据格式 把数组对象转换为字符串格式 JSON.stringify()
localStorage.setItem("todo", JSON.stringify(todolist));
// 2.获取本地存储的数据,需要把字符串数据转换为 js对象格式 JSON.parse()
var data = localStorage.getItem("todo");
// console.log(data[0].title); data 现在是字符串 是没有title 属性的
data = JSON.parse(data);
})
:checked 表示选中的个数 输出length
如:
if ($(".j-checkbox:checked").length === $(".j-checkbox").length)
判断被选中的个数是否等于全部复选框的个数
.substr(1) 从索引号为1 的位置截取字符串
.toFixed(2) 保留两位小数
parseInt() 将字符串的值转换为数值型
parseFloat() 字符串转浮点型
.addClass() 添加类名
.removeClass() 删除类名