1. jQuery元素操作 主要是遍历,创建,添加,删除元素
1.1 遍历元素 1. each()对于同一类元素做不同的操作 1 $("div" ).each(function (index,domEle ) {xxx;})
回调函数第一个参数一定是索引号,可以自己指定索引号名称。
回调函数第二个参数一定是DOM元素对象。所以想要使用jQuery方法,需要给这个dom元素转换为jQuery对象$(domEle)。
2. $.each()主要用于遍历数组,处理数据 1 $.each(arr,function(index,ele))
1.2 添加元素 1. 内部添加
内部添加后二者是父子关系。
append将元素放在内容的最后面,prepend将元素放在内容的前面。
1 2 element.append("元素") element.prepend("元素")
2. 外部添加
外部添加后二者关系是兄弟关系。
after将元素放在内容的最后面,before将元素放在内容的前面。
1 2 element.after("内容") element.before("内容")
3. 删除元素 可以删除匹配的元素,自杀。
可以删除匹配的元素的子节点。相当于element.html(“”)。
2. jQuery尺寸,位置操作 2.1 尺寸
方法
描述
element.clear()
取得匹配元素宽度和高度值,只算width/height
innerWidth()/innerHeight()
取得匹配元素宽度和高度值 包含padding
outerWidth()/outerHeight()
取得匹配元素宽度和高度值 包含padding和border
outerWidth(true)/outerHeight(true)
取得匹配元素宽度和高度值 包含padding、border和margin
参数可以不加单位。
2.2 位置 1. offset() 设置或获取元素偏移。offset()方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系。它有两个属性,left和top。
2. position() 获取距离带有定位父级位置,如果没有带有定位的父级,则以文档为准。该方法只能获取不能设置。
获取文档被卷曲的头部的距离,还可以带参数设置文档被卷曲头部的距离。参数不加单位。
在animate方法中也有scrollTop方法,用来元素做去往页面某一位置的动画。
3. jQuery事件 3.1 jQuery事件注册 1. 单个事件注册 1 element.click(function ( ) { })
2. 多个事件注册
on()方法优势1 :on() 方法在匹配元素上绑定一个或多个事件的事件处理函数。
1 2 3 4 5 6 7 8 element.on({ click :function ( ) { }, mouseover :function ( ) { } })
1 2 3 element.on("mouseover mouseout" ,function ( ) { })
on()方法优势2 :可以事件委派操作。事件委派的定义是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。
1 2 3 $("ul" ).on("click" ,"li" ,function ( ) { })
on()方法优势3 :on()方法可以给动态创建的元素绑定事件。
1 2 3 4 5 6 7 8 $("ol" ).on("click" , "li" , function ( ) { alert(11 ); }) var li = $("<li>我是后来创建的</li>" )$("ol" ).append(li);
2. 解绑事件
off()方法用来解绑事件。
不跟参数代表解绑element身上的所有事件。
加参数代表解绑特定事件。
解绑事件委托
1 $("ul").off("click","li");
3. jQuery自动触发事件
第一种:
第二种:
第三种:triggerHandle() 不会触发元素的默认行为,比如说文本框的光标闪烁。
1 $("div").triggerHandle("事件")
4. jQuery事件对象
1 element.on(events,[selector],function(event) { })
4. jQuery其他方法 4.1 jQuery拷贝对象 如果想要把某个对象拷贝(合并)给另外一个对象使用。可以使用$.extend()方法。有冲突会覆盖原来数据。
1 $.extend([deep], target, obj1, [objN])
deep:可选,true表示深拷贝,默认为false,浅拷贝。
target:是要拷贝的目标对象。
obj1:待拷贝到第一个对象的对象。
objN:待拷贝到第N个对象的对象。
浅拷贝 是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象。拷贝后target和obj会指向同一个对象,遇到同名冲突会覆盖target中的数据。
深拷贝 把obj里面的数据完全复制一份给目标对象,如果里面有不冲突的属性,会合并到一起。
4.2 多库共存 jQuery使用作 为 标 识 符 , 随 着 jQuery的 流 行 , 其 他 j s 库 也 会 用 作为标识符,随着jQuery的流行,其他js库也会用作为标识符,随着jQuery的流行,其他js库也会用作为标识符,这样一起使用会引起冲突。让jQuery和其他js库不存在冲突,叫做多库共存。
解决方案 :
把里面的$符号统一改成jQuery。比如jQuery(“div”)。
用户自己定义,让jQuery释放对$控制权。
1 var mine = jQuery.noConflict();
就可以使用mine(“div”)代替$(“div”)了。
4.3 jQuery插件 使用jQuery插件之前必须先引入jQuery文件
jQuery插件库:http://www.jq22.com/
jQuery之家:http://www.hymleaf.com/ (推荐)
使用方法:
查看演示——下载插件——打开解压后的index.html——将css和js文件夹复制到自己的文件夹中——引入文档中的css文件和js文件——复制html文件中的结构——换成自己的图片和内容——根据插件说明更改自己想调的参数
4.4 图片懒加载 图片懒加载的意思是:当我们页面滑动到可视区域,再显示图片。图片使用延迟加载可以提高网页下载速度,也可以减轻服务器负载。
实现方法:
jQuery插件库中下载EasyLazyload.js插件
在自己的文件中引入相关js文件。
按照说明复制代码到自己的文档中。
4.5 全屏滚动 网址:www.dowebok.com/demo/2014/77/ (案例)
5. toDolist案例 分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 案例:toDoList ① 文本框里面输入内容,按下回车,就可以生成待办事项。 ② 点击待办事项复选框,就可以把当前数据添加到已完成事项里面。 ③ 点击已完成事项复选框,就可以把当前数据添加到待办事项里面。 ④ 但是本页面内容刷新页面不会丢失。 案例:toDoList 分析 ① 刷新页面不会丢失数据,因此需要用到本地存储 localStorage ② 核心思路: 不管按下回车,还是点击复选框,都是把本地存储的数据加载到页面中,这样保证刷新关闭页面不 会丢失数据 ③ 存储的数据格式:var todolist = [{ title : ‘xxx’, done: false}] ④ 注意点1: 本地存储 localStorage 里面只能存储字符串格式 ,因此需要把对象转换为字符串 JSON.stringify(data)。 ⑤ 注意点2: 获取本地存储数据,需要把里面的字符串转换为对象格式JSON.parse() 我们才能使用里面的数据。 案例:toDoList 按下回车把新数据添加到本地存储里面 ① 切记: 页面中的数据,都要从本地存储里面获取,这样刷新页面不会丢失数据,所以先要把数据保存到本地存储里面。 ② 利用事件对象.keyCode判断用户按下回车键(13)。 ③ 声明一个数组,保存数据。 ④ 先要读取本地存储原来的数据(声明函数 getData()),放到这个数组里面。 ⑤ 之后把最新从表单获取过来的数据,追加到数组里面。 ⑥ 最后把数组存储给本地存储 (声明函数 savaDate()) 案例:toDoList 本地存储数据渲染加载到页面 ① 因为后面也会经常渲染加载操作,所以声明一个函数 load,方便后面调用 ② 先要读取本地存储数据。(数据不要忘记转换为对象格式) ③ 之后遍历这个数据($.each()),有几条数据,就生成几个小li 添加到 ol 里面。 ④ 每次渲染之前,先把原先里面 ol 的内容清空,然后渲染加载最新的数据。 案例:toDoList 删除操作 ① 点击里面的a链接,不是删除的li,而是删除本地存储对应的数据。 ② 核心原理:先获取本地存储数据,删除对应的数据,保存给本地存储,重新渲染列表li ③ 我们可以给链接自定义属性记录当前的索引号 ④ 根据这个索引号删除相关的数据----数组的splice(i, 1)方法 ⑤ 存储修改后的数据,然后存储给本地存储 ⑥ 重新渲染加载数据列表 ⑦ 因为a是动态创建的,我们使用on方法绑定事件 案例:toDoList 正在进行和已完成选项操作 ① 当我们点击了小的复选框,修改本地存储数据,再重新渲染数据列表。 ② 点击之后,获取本地存储数据。 ③ 修改对应数据属性 done 为当前复选框的checked状态。 ④ 之后保存数据到本地存储 ⑤ 重新渲染加载数据列表 ⑥ load 加载函数里面,新增一个条件,如果当前数据的done为true 就是已经完成的,就把列表渲染加载到 ul 里面 ⑦ 如果当前数据的done 为false, 则是待办事项,就把列表渲染加载到 ol 里面 案例:toDoList 统计正在进行个数和已经完成个数 ① 在我们load 函数里面操作 ② 声明2个变量 :todoCount 待办个数 doneCount 已完成个数 ③ 当进行遍历本地存储数据的时候, 如果 数据done为 false, 则 todoCount++, 否则 doneCount++ ④ 最后修改相应的元素 text()
todolist.htnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <link rel ="stylesheet" href ="css/todolist.css" > <script src ="js/jquery.min.js" > </script > <script src ="js/todolist.js" > </script > </head > <body > <header > <section > <label for ="title" > ToDoList</label > <input type ="text" id ="title" name ="title" placeholder ="添加ToDo" required > </section > </header > <section > <h2 > 正在进行 <span id ="todocount" > </span > </h2 > <ol id ="todolist" class ="demo-box" > </ol > <h2 > 已经完成 <span id ="donecount" > </span > </h2 > <ul id ="donelist" > </ul > </section > <footer > Copyright © 2014 todolist.cn </footer > </body > </html >
todolist.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 * { margin : 0 ; padding : 0 ; } body { background-color : rgba (255 , 133 , 154 , 0.897 ); } section ,footer { width : 600px ; margin : 0 auto; } header { height : 40px ; background-color : palevioletred; } header label { height : 40px ; float : left; color : white; line-height : 40px ; font-size : 18px ; } header input { float : right; height : 24px ; width : 300px ; margin-top : 7px ; border-radius : 5px ; border : 0 ; padding-left : 5px ; } h2 { position : relative; margin : 15px 0 ; color : white; } ol ,ul { list-style : none; } .demo-box { width : 100% ; } li { height : 30px ; background-color : palevioletred; border-bottom : 1px solid #fff ; margin-top : 5px ; } li input ,li p { float : left; height : 30px ; line-height : 30px ; margin-left : 10px ; color : white; } #donelist li input ,#donelist li p { color : #666 ; text-decoration : line-through; } footer { margin-top : 20px ; font-size : 14px ; color : #666 ; text-align : center; } a { height : 30px ; line-height : 30px ; text-decoration : none; color : #fff ; float : right; margin-right : 20px ; font-size : 12px ; } input [type="checkbox" ] :checked { background-color : #fff ; } #todocount ,#donecount { position : absolute; right : 5px ; width : 20px ; height : 30px ; background-color : pink; font-size : 14px ; color : white; line-height : 30px ; text-align : center; border-radius : 5px ; }
todolist.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 $(function () { load(); // 按下回车:把完整数据存储到本地存储里面 $("#title").on("keydown", function (event) { if (event.keyCode === 13) { // 先读取本地存储原来的数据 var local = getData(); // 把最新的数据追加给local数组 local.push({ title: $(this).val(), done: false }); // 把这个数组存储到本地存储 saveData(local); load(); $(this).val("添加ToDo"); } }) // 2. 获取本地存储的数据我们需要把里面的字符串数据转换为对象格式:JSON.parse() function getData() { var data = localStorage.getItem("todolist"); if (data !== null) { return JSON.parse(data); } else { return []; } } // 保存本地存储数据 function saveData(data) { // 1. 本地存储里面只能存储字符串数据格式,要把数组对象转换为字符串格式:JSON.stringify() localStorage.setItem("todolist", JSON.stringify(data)); } // 渲染加载页面 function load() { // 读取本地存储的数据 var data = getData(); // 每次加载前清空ol里的内容 $("ol,ul").empty(); // 统计个数 var todoCount = 0; var doneCount = 0; // 遍历这个数据 $.each(data, function (i, n) { if (n.done === false) { $("ol").prepend("<li><input type='checkbox' id=" + i + "> <p>" + n.title + "</p> <a href='javascript:;' id=" + i + ">×</a> </li>"); todoCount++; } else { $("ul").prepend("<li><input type='checkbox' checked='checked' id=" + i + "> <p>" + n.title + "</p> <a href='javascript:;' id=" + i + ">×</a> </li>"); doneCount++; } }); $("#todocount").text(todoCount); $("#donecount").text(doneCount); } // 删除操作 $("ol,ul").on("click", "a", function () { var data = getData(); // id是自定义属性,用来设置索引号 var index = $(this).attr("id"); // 没有办法直接把本地存储中的数据删掉,我们将得到的数据进行修改,然后再将该元素重新存到本地存储中 // splice(index,n)用于删除数组中元素 data.splice(index, 1); saveData(data); load(); }) // 正在进行和已完成操作 $("ul,ol").on("click", "input", function () { // 点击之后获取本地存储数据 var data = getData(); var index = $(this).attr("id"); // 修改done属性 data[index].done = $(this).prop("checked"); saveData(data); load(); }) })