笔记
参考资料:http://jquery.cuishifeng.cn/index.html jQuery 模块 == 类库 版本1.x (推荐1.12) 2.x 3.x 下载地址:http://jquery.com/ 基础语法是:$(selector).action() jQuery 或者 $ 转换 jQuery对象[0] => Dom对象 Dom对象 => $(Dom对象) DOM、BOM、Javascript的类库 1.查找元素 选择器:直接找到某个或者某类标签 1.id $("#id") 2.class $(".class") 3.tag $("tag") 4.组合选择 $("tag, .class, #id") 5.层级 $("#id tag") 子子孙孙 $("#id>tag") 孩子 筛选器 :first :last :even :odd :eq() 索引 $("#id").next() $("#id").nextAll() $("#id").nextUntil() $("#id").prev() $("#id").prevAll() $("#id").prevUntil() $("#id").parent() $("#id").parents() $("#id").parentUntil() $("#id").children() $("#id").siblings() $("#id").find() 属性 $("[class]") 具有class属性的所有标签 $("[class='c1']") 属性=c1的标签 实例 多选, 反选, 全选 选择属性 $("#tb:checkbox").prop("checked"); 获取值 $("#tb:checkbox").prop("checked", false); 设置值 jquery方法内置循环 $("#tb:checkbox").xxx $("#tb:checkbox").each(function(index){ index 当前索引 this dom对象,当前循环的元素 $(this) jquery对象 }) 三元运算符 var ret = 条件? 真值: 假值 2.操作元素 文本操作 $().text() #获取文本内容 $().text("") # 设置文本内容 $().html() #获取内容 $().html("") # 设置内容 $().val() 获取值 $().val("") 设置值 样式操作 addClass() removeClass() toggleClass() 属性操作 $().attr() # 专门用于自定义操作 $().removeAttr() $().prop("checked", true) # 专门用于checkbox, radio index() 获取索引 eq() 筛选索引 文档处理 append() prepend() after() before() remove() empty() clone() css处理 $().css("样式", "值") 点赞: $().append() $().remove() setInterval() opacity 1 --> 0 position fontSize top left right 位置: scrollTop() # 获取滚动条值 scrollLeft() $(window).scrollTop(0) # 设置值 返回顶部 offset 指定标签在html中的坐标 offset().left offset().top position() 指定标签相对父标签(relative)标签的坐标 尺寸 height([val|fn]) 获取标签的纯高度 width([val|fn]) innerHeight() innerWidth() outerHeight([options]) outerWidth([options]) 事件绑定 Dom三种绑定方式 $().click(function) $().bind("click", function) $().unbind("click", function) $().delegate("a", "click", function) $().undelegate("a", "click", function) $().on("click", function) $().off("click", function) 阻止事件发生 return false 当页面框架加载完毕函数自动执行 为了防止文档在完全加载(就绪)之前运行 jQuery 代码 $(document).ready(function(){}); $(function(){}); $().click(function(){}) jquery扩展 $.extend $.method() $.fn.extend $().method() 写扩展时,使用自执行函数,避免变量冲突 (function(){ var status = 1; // })(jQuery); 作业: 编辑框 input
实例
tab菜单-索引
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tab菜单-索引</title> <style> .pg-body{ width: 700px; height:200px; margin:0 auto; border:1px solid #9d9d9d; } .menu{ height:36px; line-height: 36px; background-color: rgba(179, 179, 179, 0.96); } .menu .menu-item{ float:left; border-right: 1px solid red; padding:0 10px; cursor: pointer; /*小手*/ } .menu .active{ background-color: #e4393c; } .hide{ display:none; } </style> </head> <body> <div class="pg-body"> <div class="menu"> <div class="menu-item active" >菜单一</div> <div class="menu-item" >菜单二</div> <div class="menu-item" >菜单三</div> </div> <div class="content"> <div >内容1</div> <div class="hide" >内容2</div> <div class="hide" >内容3</div> </div> </div> </body> <script src="jquery-3.3.1.js"></script> <script> $(".menu-item").click(function () { // 点击菜单颜色变化 $(this).addClass("active").siblings().removeClass("active"); //找到对应内容 var n = $(this).index(); //索引 console.log(n); $(".content").children().eq(n).removeClass("hide").siblings().addClass("hide"); }) </script> </html>
tab菜单-自定义属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tab菜单-自定义属性</title> <style> .pg-body{ width: 700px; height:200px; margin:0 auto; border:1px solid #9d9d9d; } .menu{ height:36px; line-height: 36px; background-color: rgba(179, 179, 179, 0.96); } .menu .menu-item{ float:left; border-right: 1px solid red; padding:0 10px; cursor: pointer; /*小手*/ } .menu .active{ background-color: #e4393c; } .hide{ display:none; } </style> </head> <body> <div class="pg-body"> <div class="menu"> <div class="menu-item active" menu-id="1">菜单一</div> <div class="menu-item" menu-id="2">菜单二</div> <div class="menu-item" menu-id="3">菜单三</div> </div> <div class="content"> <div content-id="1">内容1</div> <div class="hide" content-id="2">内容2</div> <div class="hide" content-id="3">内容3</div> </div> </div> </body> <script src="jquery-3.3.1.js"></script> <script> $(".menu-item").click(function () { // 点击菜单颜色变化 $(this).addClass("active").siblings().removeClass("active"); //找到对应内容 var menuId = $(this).attr("menu-id"); var filter = "[content-id='"+ menuId+"']"; $(".content").children(filter).removeClass("hide").siblings().addClass("hide"); }) </script> </html>
事件优先级
一般而言,自定义事件优先级高于标签自带事件
input chechbox 例外
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件优先级</title> </head> <body> <div><a onclick="return showMe()" href="http://www.baidu.com">baidu</a></div> <div><a id="i1" href="http://www.baidu.com">baidu</a></div> </body> <script src="jquery-3.3.1.js"></script> <script> function showMe(){ alert("123"); return false; //阻止链接跳转 } $("#i1").click(function(){ alert("456"); return false; //阻止链接跳转 }); </script> </html>
事件绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件绑定</title> <style> div{ width: 100px; height:36px; line-height: 36px; text-align:center; background-color: #0d3ea2; color: white; cursor:pointer; border-bottom:1px solid red; } </style> </head> <body> <div id="i1">一个标签1</div> <div id="i2">一个标签2</div> <div id="i3">一个标签3</div> <div id="i4">一个标签4</div> <div id="i5">一个标签5</div> <div id="i6">一个标签6</div> <div id="i7">一个标签7</div> <script src="jquery-3.3.1.js"></script> <script> //方式一 $("#i1").click(function () { alert("i1"); }); //方式二 function myAlert(){ alert($(this).attr("id")); } $("#i2").bind("click", myAlert); $("#i3").bind("click", myAlert); $("#i3").unbind("click", myAlert); //方式三 $("#i4").delegate("a", "click", myAlert); // 方式四 $("#i6").on("click", myAlert); $("#i7").on("click", myAlert); $("#i7").off("click", myAlert); </script> </body> </html>
位置尺寸
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>位置尺寸</title> <style> body{ height:1000px; } .gotoTop{ position: fixed; right:0; bottom: 0; width: 100px; height: 36px; line-height: 36px; background-color: #9d9d9d; color:white; text-align: center; cursor: pointer; } .box{ width: 400px; height: 300px; background-color: #2459a2; border:1px solid red; } </style> </head> <body> <div class="box"></div> <div class="gotoTop">返回顶部</div> </body> <script src="jquery-3.3.1.js"></script> <script> // 滚动条,回到顶部 $(".gotoTop").click(function () { $(window).scrollTop(0); }); //偏移量 var off = $(".gotoTop").offset(); console.log(off); console.log(off.top); console.log(off.left); //坐标 var pos = $(".gotoTop").position(); console.log(pos); //尺寸 console.log("height:" + $(".box").height()); console.log("width:" + $(".box").width()); console.log("innerHeight:" + $(".box").innerHeight()); console.log("innerWidth:" + $(".box").innerWidth()); console.log("outerHeight:" + $(".box").outerHeight()); console.log("outerWidth:" + $(".box").outerWidth()); // height:300 // width:400 // innerHeight:300 // innerWidth:400 // outerHeight:302 // outerWidth:402 </script> </html>
全选取消反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>全选取消反选</title> </head> <body> <input type="button" value="全选" onclick="checkAll()"> <input type="button" value="反选" onclick="reverseAll()"> <input type="button" value="取消" onclick="cancelAll()"> <table border="1px"> <thead> <tr> <th>选择</th> <th>ip</th> <th>port</th> </tr> </thead> <tbody> <tr> <td><input type="checkbox"></td> <td>0.0.0.1</td> <td>3306</td> </tr> <tr> <td><input type="checkbox"></td> <td>0.0.0.1</td> <td>3306</td> </tr> <tr> <td><input type="checkbox"></td> <td>0.0.0.1</td> <td>3306</td> </tr> <tr> <td><input type="checkbox"></td> <td>0.0.0.1</td> <td>3306</td> </tr> </tbody> </table> <script src="jquery-3.3.1.js"></script> <script> function checkAll(){ $(":checkbox").prop("checked", true); } function reverseAll() { // 通过Dom对象方式 // $(":checkbox").each(function() { // if(this.checked){ // this.checked=false; // } else{ // this.checked=true; // } // }) // 通过jquery对象方式 // $(":checkbox").each(function () { // if($(this).prop("checked")){ // $(this).prop("checked", false); // } else{ // $(this).prop("checked", true); // } // }) // 通过三元运算 $(":checkbox").each(function () { var ret = $(this).prop("checked")? false: true; $(this).prop("checked", ret); }) } function cancelAll() { $(":checkbox").prop("checked", false); } </script> </body> </html>
侧边菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>侧边菜单</title> <style> .menu{ width:200px; } .header{ height: 40px; background-color: #0d3ea2; color:white; line-height: 40px; text-align: center; font-weight: bold; } .content div{ height: 36px; line-height: 36px; text-align: center; background-color: #dddddd; } .hide{ display:none; } </style> </head> <body> <div class="menu"> <div class="item"> <div class="header">菜单2</div> <div class="content"> <div>内容1</div> <div>内容2</div> <div>内容3</div> </div> </div> <div class="item"> <div class="header">菜单1</div> <div class="content hide"> <div>内容1</div> <div>内容2</div> <div>内容3</div> </div> </div> <div class="item"> <div class="header">菜单3</div> <div class="content hide"> <div>内容1</div> <div>内容2</div> <div>内容3</div> </div> </div> <div class="item"> <div class="header">菜单4</div> <div class="content hide"> <div>内容1</div> <div>内容2</div> <div>内容3</div> </div> </div> </div> <script src="jquery-3.3.1.js"></script> <script> // 思路: // 为每个标题栏绑定事件 // 当前点击的标签$(this) // 获取下一个标签,展开 // 获取父级标签 // 获取所有兄弟标签 // 添加和移除样式 // 筛选器 // $(this).next() 下一个 // $(this).prev() 上一个 // $(this).parent() 父 // $(this).children() 孩子 // $(this).siblings() 兄弟 // $(this).find() 子子孙孙 // 添加删除类 // $(this).addClass() // $(this).removeClass() // 绑定事件 // 链式编程 $(".header").click(function () { $(this).next().removeClass("hide"); $(this).parent().siblings().find(".content").addClass("hide"); }) </script> </body> </html>
委托绑定事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>委托绑定事件</title> </head> <body> <div><input type="text"></div> <div><input type="button" value="添加"></div> <ul> <li>标签1</li> <li>标签2</li> <li>标签3</li> <li>标签4</li> <li>标签5</li> </ul> <script src="jquery-3.3.1.js"></script> <script> $(document).ready(function () { //添加列表元素 $(":button").click(function () { var v = $(":text").val(); var tag = document.createElement("li"); tag.innerText = v; $("ul").append(tag); }); //后面主动添加的元素也有点击事件 $("ul").delegate("li", "click", function () { alert($(this).text()); }); } ) </script> </body> </html>
开关操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>开关操作</title> <style> .hide{ display: none; } </style> </head> <body> <input id="toggle" type="button" value="开关"> <a class="c1">文字</a> <script src="jquery-3.3.1.js"></script> <script> $("#toggle").click(function () { $(".c1").toggleClass("hide"); // 相当于: // if($(".c1").hasClass("hide")){ // $(".c1").removeClass("hide"); // } else{ // $(".c1").addClass("hide"); // } }) </script> </body> </html>
扩展jquery
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>扩展jquery</title> </head> <body> <script src="jquery-3.3.1.js"></script> <script> //扩展方法: $.extend({ "myFunc": function () { alert("my function") } }); // $.myFunc(); //扩展方法二: $.fn.extend({ "myFoo": function () { alert("my foo") } }); $().myFoo(); </script> </body> </html>
模态框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模态框</title> <style> .hide{ display:none; } /*遮罩层*/ .shadow{ position: fixed; top:0; left:0; bottom:0; right:0; background-color: #333333; opacity: 0.6; z-index: 9; } /*模态框*/ .mode{ position: fixed; width:500px; height:400px; top:50%; left:50%; margin-top: -200px; margin-left:-250px; z-index: 10; background-color:#ffffff; } </style> </head> <body> <input type="button" onclick="showMode()" value="显示"> <table border="1px"> <thead> <tr><th>序号</th><th>ip</th><th>port</th><th>操作</th></tr> </thead> <tbody> <tr><td>1</td><td>0.0.0.1</td><td>3301</td> <td><a class="edit">编辑</a> | 删除</td></tr> <tr><td>2</td><td>0.0.0.2</td><td>3302</td> <td><a class="edit">编辑</a> | 删除</td></tr> <tr><td>3</td><td>0.0.0.3</td><td>3303</td> <td><a class="edit">编辑</a> | 删除</td></tr> <tr><td>4</td><td>0.0.0.4</td><td>3304</td> <td><a class="edit">编辑</a> | 删除</td></tr> <tr><td>5</td><td>0.0.0.5</td><td>3305</td> <td><a class="edit">编辑</a> | 删除</td></tr> <tr><td>6</td><td>0.0.0.6</td><td>3306</td> <td><a class="edit">编辑</a> | 删除</td></tr> </tbody> </table> <div class="shadow hide"> <div class="mode"> <input type="button" onclick="hideMode()" value="取消"> <input type="text" name="hostname"> <input type="text" name="port"> </div> </div> <script src="jquery-3.3.1.js"></script> <script> function showMode() { $(".shadow").removeClass("hide"); } function hideMode() { $(".shadow").addClass("hide"); $(".mode input[type='text']").val(""); } $(".edit").click(function () { showMode(); // 获取本行的内容 var tds = $(this).parent().prevAll(); var hostname = $(tds[1]).text(); var port = $(tds[0]).text(); $(".mode input[name='hostname']").val(hostname); $(".mode input[name='port']").val(port); }) </script> </body> </html>
模态框-属性使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模态框</title> <style> .hide{ display:none; } /*遮罩层*/ .shadow{ position: fixed; top:0; left:0; bottom:0; right:0; background-color: #333333; opacity: 0.6; z-index: 9; } /*模态框*/ .mode{ position: fixed; width:400px; height:300px; top:50%; left:50%; margin-top: -200px; margin-left:-200px; z-index: 10; background-color:#ffffff; text-align: center; } </style> </head> <body> <input type="button" onclick="showMode()" value="显示"> <table border="1px" id="tb"> <thead> <tr><th>序号</th><th>ip</th><th>port</th><th>密码</th><th>操作</th></tr> </thead> <tbody> <tr class="first-tr"><td >1</td> <td target="hostname">0.0.0.1</td> <td target="port">3301</td> <td target="password">123451</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td> </tr> <tr><td>2</td> <td target="hostname">0.0.0.2</td> <td target="port">3302</td> <td target="password">123452</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td></tr> <tr><td>3</td> <td target="hostname">0.0.0.3</td> <td target="port">3303</td> <td target="password">123453</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td> </tr> <tr><td>4</td> <td target="hostname">0.0.0.4</td> <td target="port">3304</td> <td target="password">123454</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td> </tr> <tr><td>5</td> <td target="hostname">0.0.0.5</td> <td target="port">3305</td> <td target="password">123455</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td> </tr> <tr><td>6</td> <td target="hostname">0.0.0.6</td> <td target="port">3306</td> <td target="password">123456</td> <td><a class="edit">编辑</a> | <a class="del" >删除</a></td> </tr> </tbody> </table> <div class="shadow hide"> <div class="mode"> <p>主机名:<input type="text" name="hostname"></p> <p>端口号:<input type="text" name="port"></p> <p> 密 码:<input type="text" name="password"></p> <input type="button" onclick="hideMode()" value="取消"> <input type="button" onclick="confirm()" value="确定添加"> </div> </div> <script src="jquery-3.3.1.js"></script> <script> function showMode() { $(".shadow").removeClass("hide"); } function hideMode() { $(".shadow").addClass("hide"); $(".mode input[type='text']").val(""); } function confirm() { //创建行 var tr = document.createElement("tr"); //行号 var td = document.createElement("td"); td.innerText= "x"; $(tr).append(td); $(".mode input[type='text']").each(function () { var td = document.createElement("td"); td.innerText= $(this).val(); $(tr).append(td); console.log(td); }); $("#tb").append(tr); hideMode(); } $(".del").click(function () { $(this).parent().parent().remove(); }); $(".edit").click(function () { showMode(); // 获取本行的内容 var tds = $(this).parent().prevAll(); tds.each(function(){ // 获取属性值 var target = $(this).attr("target"); // 获取内容 var text = $(this).text(); $(".mode input[name="+ target +"]").val(text); }) }) </script> </body> </html>
添加删除元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加删除元素</title> </head> <body> <input type="text" name="inputBox"> <input type="button" name="add" value="增加"> <input type="button" name="remove" value="删除"> <input type="button" name="empty" value="清除"> <input type="button" name="clone" value="复制"> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src="jquery-3.3.1.js"></script> <script> $("input[name='add']").click(function () { var value = $("input[name='inputBox']").val(); var html = "<li>" + value +"</li>"; $("ul").append(html); }); $("input[name='remove']").click(function () { var index = $("input[name='inputBox']").val(); $("ul").children().eq(index).remove(); }); $("input[name='empty']").click(function () { var index = $("input[name='inputBox']").val(); $("ul").children().eq(index).empty(); }); $("input[name='clone']").click(function () { var index = $("input[name='inputBox']").val(); var tag = $("ul").children().eq(index).clone(); $("ul").append(tag); }) </script> </body> </html>
点赞效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>点赞效果</title> <style> .container{ width:700px; margin: 0 auto; border: 1px solid #9d9d9d; } .item{ position: relative; height: 100px; width:30px; margin-left: 20px; line-height: 100px; } </style> </head> <body> <div class="container"> <div class="item"><span>赞</span></div> </div> </body> <script src="jquery-3.3.1.js"></script> <script> $(".item").click(function () { addFavor(this); console.log(this); }); function addFavor(self) { //Dom对象 var fontSize = 15; var top = 0; var right = 0; var opacity = 1; var tag = document.createElement("span"); // 设置css属性 $(tag).text("+1"); $(tag).css("color", "green"); $(tag).css("position", "absolute"); $(tag).css("fontSize", fontSize + "px"); $(tag).css("right", right + "px"); $(tag).css("top", top + "px"); $(tag).css("opacity", opacity); //透明度 $(self).append(tag); //动态效果 var obj = setInterval(function () { fontSize = fontSize + 10; top = top -10; right = right - 10; opacity = opacity - 0.1; $(tag).css("fontSize", fontSize + "px"); $(tag).css("right", right + "px"); $(tag).css("top", top + "px"); $(tag).css("opacity", opacity); // 移除标签 if(opacity < 0){ clearInterval(obj); $(tag).remove(); } }, 50); } </script> </html>
编辑框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>编辑框</title> </head> <body> <input class="edit" type="button" value="编辑"> <input class="confirm" type="button" value="确认"> <table border="1px" id="tb"> <thead> <tr> <th>序号</th> <th>ip</th> <th>port</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>10.0.0.1</td> <td>3301</td> </tr> <tr> <td>2</td> <td>10.0.0.2</td> <td>3302</td> </tr> <tr> <td>3</td> <td>10.0.0.3</td> <td>3303</td> </tr> </tbody> </table> <script src="jquery-3.3.1.js"></script> <script type="text/javascript"> $(document).ready(function(){ // 编辑模式 $(".edit").click(function(){ $(this).attr("disabled", true); //编辑不可用 $("#tb").find("td").each(function(){ var v = $(this).text(); $(this).text(""); //清空文本 var input = document.createElement("input"); $(input).attr("type", "text").val(v); $(this).append(input); }) }) // 保存 $(".confirm").click(function(){ $(".edit").removeAttr("disabled"); //编辑可用 console.log($(".edit")[0]); $("#tb").find("td").each(function(){ var v = $(this).children().val() $(this).children().remove(); $(this).text(v); }) }) }) </script> </body> </html>
表单验证
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单验证</title> <style> .error{ color:red; } form div{ line-height: 36px; } </style> </head> <body> <form action="http://www.baidu.com" method="get" id="f1"> <div><input type="text" name="username"></div> <div><input type="password" name="password"></div> <div><input type="text" name="email"></div> <div><input type="text" name="phoneNumber"></div> <div><input type="submit" value="提交"></div> </form> <script src="jquery-3.3.1.js"></script> <script> $(":submit").click(function(){ $(".error").remove(); //清空验证 var flag = true; //作为全局标记 console.log(this); $("#f1").find("input[type='text'],input[type='password']").each(function () { var v = $(this).val(); console.log(v); if(v.length <= 0){ flag = false; //添加错误提示 var tag = document.createElement("span"); tag.innerText = "必填"; tag.className = "error"; $(this).after(tag); } }); return flag; }); </script> </body> </html>