前端基础之JQuery - day15
写在前面
张国臂掖,以通西域;
http://jquery.cuishifeng.cn/index.html JQuery对象: Jquery.方法 $.方法
# Jquery和$是完全一样的 JQuery的方法只能JQuery对象调用
JS的方法只能JS使用 变量命名:
JS var $variable = jQuery 对象
JQuery var variable = DOM 对象 JQuery语法:$(selector).action()
selector 选择器
action 对标签的操作 JQuery的选择器(selector)
基本选择器
层级选择器
... $(".p1").css("color","red");
JQuery 选择器选到的是一个集合对象(一组标签),后面的操作会循环加载; 但是JS不支持,JS必须自己写循环处理; JQuery支持链式操作 JQuery固有属性 --> prop
input type="checked"
selected=selected
自定义的属性 --> attr clone
参考:http://www.cnblogs.com/yuanchenqi/articles/6936986.html
一、JQuery对象
jQuery 对象就是通过jQuery包装DOM对象后产生的对象;
jQuery 对象是 jQuery 独有的.;
如果一个对象是 jQuery 对象, 那么它就可以使用 jQuery 里的方法: $(“#test”).html();
$("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法 这段代码等同于用DOM实现代码: document.getElementById(" test ").innerHTML; 虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错 约定:如果获取的是 jQuery 对象, 那么要在变量前面加上$. var $variable = jQuery 对象
var variable = DOM 对象 $variable[0]:jquery对象转为dom对象 $("#msg").html(); $("#msg")[0].innerHTML
jquery的基础语法:$(selector).action() 参考:http://jquery.cuishifeng.cn/
二、JQuery查找元素
1.选择器
基本选择器
$("*") $("#id") $(".class") $("element") $(".class,p,div") 层级选择器
$(".outer div") $(".outer>div") $(".outer+div") $(".outer~div") 基本筛选器
$("li:first") $("li:eq(2)") $("li:even") $("li:gt(1)") 属性选择器
$('[id="div1"]') $('["alex="sb"][id]') 表单选择器
$("[type='text']") ---可简写成-->$(":text")
// 注意只适用于input标签 : $("input:checked")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> <!--首先引入Jquery库-->
<script src="jquery-3.1.1.js"></script> </head>
<body> <!--<span>span</span>--> <!--<p>ppp</p>-->
<!--<p class="p1">ppp</p>-->
<!--<p class="p1">ppp</p>--> <!--<div id="d1">DIV</div>--> <!--++++++++++--> <div class="outer">
<p>p1</p>
<div class="inner">
<p>p2</p>
</div>
</div>
<p>p3</p>
<a href="">click</a>
<p>p4</p> <div egon="xialv">11</div>
<div egon="xialv2">22</div> <input type="checkbox">
<input type="text"> <script>
//基本选择器
// $("span")
// $("*")
// $(".p1").css("color","red");
// $("#d1").css("color","blue"); // $(".class,p,div") // 多元素选择器 //层级选择器
// 后代选择器
// $(".outer p").css("color","red"); // 子代选择器
// $(".outer>p").css("color","red"); // 毗邻选择器 (紧挨着的兄弟标签)
// $(".outer+p").css("color","red"); // 兄弟选择器 (所有的兄弟标签)
// $(".outer~p").css("color","red"); //属性选择器
// 自定义属性
$("[egon]").css("color","green"); $("[egon='xialv2']").css("color","green"); //表单选择器
$("[type='text']").css("border","1px solid red");
// 可以简写成如下形式,仅适用于input标签
$(":text").css("border","1px solid red"); </script>
</body>
</html>
2.表单属性选择器
:enabled
:disabled
:checked
:selected
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<!--<input type="checkbox" value="123">-->
<!--<input type="checkbox" value="456" checked>-->
<select id="sel">
<option value="1" selected="selected">Flowers</option>
<option value="2">Gardens</option>
<option value="3">Trees</option>
<option value="4">Fruits</option>
</select>
</form>
<script src="jquery-3.1.1.js"></script>
<script>
// $("input:checked").each(function(){
// console.log($(this).val())
// })
// console.log($("input:checked").length); // 1 console.log($("option:selected").length); // 只能默认选中一个,所以只能lenth:1
$("option:selected").each(function () {
console.log("--> " + $(this).val());
})
$("#sel").change(function () {
console.log($(this).val());
}) </script>
</body>
</html>
3.筛选器
# 过滤筛选器
$("li").eq(2) $("li").first() $("ul li").hasclass("test") <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
</head>
<body>
<ul class="outer">
<li class="item">11</li>
<li class="item">22</li>
<li class="item">33</li>
<li class="item">44</li>
<li class="item">55</li>
<li class="item">66</li>
<li class="item">77</li>
<li class="item">88</li>
<li class="item">99</li>
<li class="item">1010</li>
</ul>
<script>
// eq 索引
// $("ul li").eq(4).css("color","red"); // 推荐
// $("ul li:eq(4)").css("color","red"); // 需要自己拼接字符串,比较麻烦 $("ul li").first().css("color","red");
$("ul li:lt(5)").css("color","red");
$("ul li:gt(5)").css("color","red");
$("ul li:even").css("color","red"); // 奇数
$("ul li:odd").css("color","red"); // 偶数
</script>
</body>
</html> # 导航查找(查找筛选器) 查找子标签: $("div").children(".test") $("div").find(".test") 向下查找兄弟标签: $(".test").next() $(".test").nextAll()
$(".test").nextUntil() 向上查找兄弟标签: $("div").prev() $("div").prevAll()
$("div").prevUntil()
查找所有兄弟标签: $("div").siblings() 查找父标签: $(".test").parent() $(".test").parents()
$(".test").parentUntil() <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
</head>
<body> <div class="item1">11</div>
<div class="item2">22</div>
<div class="item3">33</div>
<div class="item4">44</div>
<div class="item5">55</div> <div class="outer">
<div class="inner">
<p id="p1">p1</p>
</div>
<p>p2</p>
</div>
<p>p3</p> <script>
// 向下查找兄弟标签
// $(".item1").next().css("color","red");
// $(".item1").nextAll().css("color","red");
// $(".item1").nextUntil(".item5").css("color","red"); // 查找所有兄弟标签
$(".item3").siblings().css("color","red"); // 查找子代标签
// $(".outer").children().css("color","red");
$(".outer").children("p").css("color","red");
// 查找后代标签
$(".outer").find("p").css("color","red"); // 查找父标签
$("#p1").parent().css("color","red");
$("#p1").parents().css("color","red");
$("#p1").parentsUntil(".outer").css("color","red"); </script>
</body>
</html>
三、JQuery操作元素
1.JQuery事件
# 页面载入 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
<script>
// 对应 JS 的onload事件
// $(document).ready(function () {
// $(".p1").css({"color":"red","font-size":"50px"});
// });
// 可以简写成如下形式:
$(function () {
$(".p1").css("color","blue");
})
</script>
</head>
<body> <p class="p1">PPP</p> </body>
</html> # 事件绑定 //JS事件绑定: js的标签对象.on事件=函数
//JQuery事件绑定: $().事件(函数) <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
</head>
<body>
<ul>
<li>11</li>
<li>22</li>
<li>33</li>
<li>44</li>
<li>55</li>
</ul> <button>ADD</button>
<script>
$("button").click(function () {
$("ul").append("<li>666</li>");
}); //JS事件绑定: js的标签对象.on事件=函数
//JQuery事件绑定: $().事件(函数) // 给 li 绑定点击事件(第一种绑定方式),点击一次就执行相关操作
// 但是 button 增加的li点击不生效
$("ul li").click(function () {
console.log($(this).text());
alert(123);
}); // 第二种绑定方式
// on方法实现事件绑定 (JQuery 3 里统一用on)
$("ul li").on("click",function () {
alert(456);
}); // 事件委派 -> ul 把事件下发到子标签li
// 这样写会避免新添加的子标签无法响应事件的bug
$("ul").on("click","li",function () {
console.log($(this).text()); // 获取li标签里写好的值
alert(789);
})
// 要注意 on 前面是什么,以及on的参数 </script>
</body>
</html> # 关于事件委派:
$("").on(eve,[selector],[data],fn)
在选择元素上绑定一个或多个事件的事件处理函数。 # 事件切换 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.test{
width: 200px;
height: 200px;
background-color: wheat;
}
</style>
</head>
<body> <div class="test"></div>
</body>
<script src="jquery-3.1.1.js"></script>
<script>
// 第一种方式
function enter(){
console.log("enter")
}
function out(){
console.log("out")
}
$(".test").hover(enter,out) // 第二种方式
$(".test").mouseenter(function(){
console.log("enter")
});
$(".test").mouseleave(function(){
console.log("leave")
});
</script>
</html>
2.JQuery属性操作
--------------------------CSS类
$("").addClass(class|fn)
$("").removeClass([class|fn]) --------------------------属性
$("").attr();
$("").removeAttr();
$("").prop();
$("").removeProp(); --------------------------HTML代码/文本/值
$("").html([val|fn])
$("").text([val|fn])
$("").val([val|fn|arr]) ---------------------------
$("#c1").css({"color":"red","fontSize":"35px"})
# attr 和 prop <input id="chk1" type="checkbox" />是否可见
<input id="chk2" type="checkbox" checked="checked" />是否可见 <script> //对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
//对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
//像checkbox,radio和select这样的元素,选中属性对应“checked”和“selected”,这些也属于固有属性,因此
//需要使用prop方法去操作才能获得正确的结果。 // $("#chk1").attr("checked")
// undefined
// $("#chk1").prop("checked")
// false // ---------手动选中的时候attr()获得到没有意义的undefined-----------
// $("#chk1").attr("checked")
// undefined
// $("#chk1").prop("checked")
// true console.log($("#chk1").prop("checked"));//false
console.log($("#chk2").prop("checked"));//true
console.log($("#chk1").attr("checked"));//undefined
console.log($("#chk2").attr("checked"));//checked
</script>
# 文本操作 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
</head>
<body> <div class="c1">
<p>DIV-PPP</p>
</div> <input type="text" id="inp" value="123"> <p class="p1" value="standby">PPP</p> <script>
console.log($(".c1").html()); // <p>DIV-PPP</p>
console.log($(".c1").text()); // DIV-PPP $(".c1").html("<b>LIU</b>"); // LIU console.log($("#inp").val()); // 123
$("#inp").val(999);
console.log($("#inp").val()); // 999 // p标签没有value属性,是自己加的属性,用val()是获取不到的;可以用attr
console.log($(".p1").val()); // 设置CSS样式
$(".p1").css({"color":"red","fontSize":"35px"})
</script> </body>
</html>
# JQuery重写 左侧菜单 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
<style>
.item {
margin: 20px;/*上 下 左 右*/
}
.left_menu {
width: 20%;
height: 500px;
background-color: wheat;
float: left;
}
.title {
text-align: center;
background-color: #53e3a6;
line-height: 30px;
color: red;
}
.hidden {
display: none;
}
.content_menu {
width: 80%;
height: 500px;
background-color: green;
float: left;
}
</style>
</head>
<body>
<div class="outer">
<div class="left_menu">
<div class="item">
<div class="title">菜单一</div>
<div class="con">
<p>111</p>
<p>112</p>
<p>113</p>
</div>
</div>
<div class="item">
<div class="title">菜单二</div>
<div class="con hidden">
<p>211</p>
<p>212</p>
<p>213</p>
</div>
</div>
<div class="item">
<div class="title">菜单三</div>
<div class="con hidden">
<p>311</p>
<p>312</p>
<p>313</p>
</div>
</div>
</div>
<div class="content_menu"></div>
</div> <script>
$(".title").click(function () {
// $(this).next().removeClass("hidden");
// $(this).parent().siblings().children(".con").addClass("hidden"); // JQuery 支持链式操作,所以上面两句可以简写为下面一句:
$(this).next().removeClass("hidden").parent().siblings().children(".con").addClass("hidden");
})
</script>
</body>
</html>
# JQuery 重写 表格全选、反选、取消 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
</head>
<body> <button>全选</button>
<button>反选</button>
<button>取消</button> <table border="1">
<tr>
<th> </th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>111</td>
<td>111</td>
<td>111</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>222</td>
<td>222</td>
<td>222</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>333</td>
<td>333</td>
<td>333</td>
</tr>
</table> <script>
$("button").click(function () {
if ("全选" == $(this).text())
{
$("input").prop("checked",true);
}
else if ("取消" == $(this).text())
{
$("input").prop("checked",false);
}
else
{
$("input").each(function () {
$(this).prop("checked",!$(this).prop("checked"));
})
}
})
</script> </body>
</html>
# Jquery实现 tab切换 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.outer {
width: 60%;
height: 300px;
background-color: wheat;
margin: 100px auto;
}
.outer ul.title {
background: darkgrey;
padding: 10px;
}
.outer ul.title li {
display: inline-block;
list-style: none;
padding: 5px;
}
.hide {
display: none;
}
.outer .content {
padding: 20px;
}
.active {
background-color: red;
color: white;
border-top: 3px solid blue;
}
</style>
<script src="jquery-3.1.1.js"></script>
</head>
<body>
<div class="outer">
<ul class="title">
<li class="active" relation="c1">商品介绍</li>
<li relation="c2">商品规格</li>
<li relation="c3">售后保障</li>
</ul>
<div class="content">
<div class="item" id="c1">这里是商品介绍</div>
<div class="item hide" id="c2">这里是商品规格</div>
<div class="item hide" id="c3">售后服务在这里</div>
</div>
</div> <script src="jquery-3.1.1.js"></script>
<script>
$(".title li").click(function () {
// 更改 title 的背景色
$(this).addClass("active");
$(this).siblings().removeClass("active"); // 更改title对应的content显示
// 通过在 li 标签里埋了一个自定义属性,对应到content里面id值
var $id_val = $(this).attr("relation");
var $sel = "#" + $id_val; // 拼接字符串
$($sel).removeClass('hide');
$($sel).siblings().addClass('hide');
})
</script> </body>
</html>
3.JQuery each循环
<!--循环方式1: $.each(obj,func(){})-->
<script>
// JQuery遍历数组
var arr = [11,22,33,44];
$.each(arr,function (i,j) {
console.log(i); // 索引
console.log(j); // 值
// console.log(arr[i]); // 值
}); // JQuery遍历object
// 支持类似字典的数据类型,实际是object对象
var info = {"name":"egon","age":18,"gender":"male"};
$.each(info,function (i,j) {
console.log(i);
console.log(j);
}) </script> <!--循环方式2: $("").each(func(){})-->
<body> <p class="item">P1</p>
<p class="item">P2</p>
<p class="item">P3</p>
<p class="item">P4</p>
<script>
// JQuery遍历标签
$(".item").each(function () {
if ($(this).text()=="P3")
{
console.log($(this).text());
console.log($(this).html());
$(this).css({"color":"red","font-size":"20px"})
}
})
</script>
</body>
# each循环扩展 # 示例1
<script>
function f(){ for(var i=0;i<4;i++){
if (i==2){
return
}
console.log(i)
}
}
f(); // 输出 0 和 1
</script> # 示例2
<script src="jquery-3.1.1.js"></script>
<script>
li=[11,22,33,44];
$.each(li,function(i,v){
if (v==33){
// return ; // 输出 11 22 44
// return true; // 输出 11 22 44
return false // 输出 11 22
}
console.log(v)
});
</script> function里的return只是结束了当前的函数,并不会影响后面函数的执行;
如果你想return后下面循环函数继续执行,那么就直接写return或return true
如果你不想return后下面循环函数继续执行,那么就直接写return false
4.文档节点处理
//创建一个标签对象
$("<p>") //内部插入 $("").append(content|fn) ----->$("p").append("<b>Hello</b>");
$("").appendTo(content) ----->$("p").appendTo("div");
$("").prepend(content|fn) ----->$("p").prepend("<b>Hello</b>");
$("").prependTo(content) ----->$("p").prependTo("#foo"); //外部插入 $("").after(content|fn) ----->$("p").after("<b>Hello</b>");
$("").before(content|fn) ----->$("p").before("<b>Hello</b>");
$("").insertAfter(content) ----->$("p").insertAfter("#foo");
$("").insertBefore(content) ----->$("p").insertBefore("#foo"); //替换
$("").replaceWith(content|fn) ----->$("p").replaceWith("<b>Paragraph. </b>"); //删除 $("").empty()
$("").remove([expr]) //复制 $("").clone([Even[,deepEven]])
# 示例 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.outer {
width: 500px;
height: 300px;
background-color: wheat;
margin: 100px auto;
}
</style>
</head>
<body>
<div class="outer">
<h4>hello node</h4>
</div> <button class="add-node">ADD</button>
<button class="del-node">DEL</button> <div class="box">
<p class="p1">PPP</p>
</div> <div class="outerBox">
<div></div>
</div> <script src="../jquery-3.1.1.js"></script> <script>
$(".add-node").click(function () {
var $ele_p = $("<p>");
$ele_p.text("--->ppp");
// 添加子标签
$(".outer").append($ele_p);
// 等价于下面这种写法:
// $ele_p.appendTo(".outer"); // // 添加兄弟标签
// $(".outer").after($ele_p);
// 等价于下面这种写法:
// $ele_p.insertAfter(".outer");// 类似于appendTo()
//
// // 清空标签
// $(".box").empty();
//
// // 删除标签
// $(".box").remove();
//
// // 复制标签
// var $p1_clone = $(".p1").clone();
// $(".box").append($p1_clone); })
</script> </body>
</html>
# 节点clone示例 <body>
<div class="outer">
<div class="box">
<button class="add">+</button>
<input type="text" placeholder="请输入..." id="line">
</div>
</div> <script>
$(".add").click(function () {
// var $new_box = $(".box").clone(); // 错误
var $new_box = $(this).parent().clone();
// $new_box.children("button").attr("class","to_remove");
// $new_box.children("button").html("-"); // 可以简写成下面这一句:
$new_box.children("button").html("-").attr("class","to_remove"); $(".outer").append($new_box);
});
// 这样写是不生效的,需要改成事件委派的形式
// $(".to_remove").click(function () {
// var $ele_del = $(this).parent();
// console.log($ele_del);
//// $ele_del.remove();
// }) // 事件委派 -> 解决新添加的标签事件绑定失败的问题
$(".outer").on("click",".to_remove",function () {
var $ele_del = $(this).parent();
console.log($ele_del);
$ele_del.remove();
})
</script>
</body>
5.动画效果
# 显示和隐藏 <body>
<p>hello egon</p>
<button id="hide_btn">隐藏</button>
<button id="show_btn">显示</button>
<button id="toggle_btn">Toggle</button> <script src="jquery-3.1.1.js"></script>
<script>
$("#hide_btn").click(function () {
// $("p").hide();
// $("p").hide(1000); // 添加回调函数
$("p").hide(1000,function () {
alert(123);
});
});
$("#show_btn").click(function () {
// $("p").show();
$("p").show(1000);
});
$("#toggle_btn").click(function () {
// $("p").toggle();
$("p").toggle(1000);
});
</script>
</body>
# 滑动滑出 <body> <img src="tsl.jpg" alt="" class="tsl">
<button class="slide_out">滑出</button>
<button class="slide_in">滑出</button>
<button class="switch">切换</button> <script src="jquery-3.1.1.js"></script>
<script>
$(".slide_out").click(function () {
$(".tsl").slideDown(1000); // 1000 ms 完成
})
$(".slide_in").click(function () {
$(".tsl").slideUp(1000);
})
$(".switch").click(function () {
$(".tsl").slideToggle(1000);
})
</script>
</body>
# 淡入淡出 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.1.1.js"></script>
<style>
.item {
width: 200px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body> <div class="item"></div>
<button class="fade_in">淡入</button>
<button class="fade_out">淡出</button>
<button class="fade_switch">切换</button> <script>
$(".fade_in").click(function () {
$(".item").fadeIn(3000);
});
$(".fade_out").click(function () {
$(".item").fadeOut(3000);
});
$(".fade_switch").click(function () {
$(".item").fadeToggle(3000);
});
</script> </body>
</html>
# CSS位置操作 $("").offset([coordinates])
$("").position()
$("").scrollTop([val])
$("").scrollLeft([val]) # CSS尺寸操作 $("").height([val|fn])
$("").width([val|fn])
$("").innerHeight()
$("").innerWidth()
$("").outerHeight([soptions])
$("").outerWidth([options])
四、实用例子
http://www.cnblogs.com/yuanchenqi/articles/6936986.html
五、练习
要求
用JQuery重写table表格增肌、修改、删除操作
并适当添加左侧菜单和tab切换等样式
代码实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <style>
* {
margin: 0;
padding: 0;
}
.title {
text-align: center;
margin-top: 10px;
margin-bottom: 10px;
}
.header {
background-color: black;
height: 60px;
line-height: 60px;
overflow: hidden;
clear: both;
}
.nav-title {
border: 1px solid red;
}
.nav-title li{
display: inline-block;
}
.nav-title li a {
color: darkgray;
text-decoration: none;
display: block;
padding: 0 1.5em;
height: 60px;
font-family: '微软雅黑';
float: left;
font-size: 1.1em;
text-align: center;
transition-duration: 0.3s;
margin-left: 0;
}
.nav-title li a:hover {
color: white;
background-color: dimgrey;
}
.nav-title .active {
background-color: blue;
/*color: black;*/
border-top: 3px solid greenyellow;
}
.left-menu {
width: 12%;
height: 500px;
background-color: wheat;
float: left;
}
.left-menu .item .zone-name {
text-align: center;
background-color: #53e3a6;
line-height: 40px;
color: red;
}
.left-menu .item a {
text-decoration: none;
}
.left-menu .item a:hover {
text-decoration: underline;
font-size: 1.1em;
}
.left-menu .item .con {
text-align: center;
}
.left-menu .item .con p {
padding-top: 10px;
}
.detail {
width: 88%;
height: 500px;
background-color: white;
float: left;
}
.hidden {
display: none;
}
#table {
margin-top: 10px;
border: 1px solid blue;
margin-left: 300px;
}
.fade {
position: fixed;
top: 0; /*遮罩层占满屏*/
bottom: 0;
left: 0;
right: 0;
background-color: darkgrey;
opacity: 0.5;
}
.model {
width: 400px;
height: 200px;
background-color: white;
border-radius: 4%;
position: absolute;
top: 50%;
left: 50%;
margin-left: -200px; /* 让跳出框水平+垂直居中 */
margin-top: -100px;
}
.item-info {
margin-top: 20px;
}
.item-info label {
float: left;
width: 30%;
margin-left: 50px;
}
#add {
width: 100px;
height: 50px;
background-color: green;
border-radius: 10px;
font-size: 20px;
color: white;
margin-left: 500px;
margin-top: 30px;
}
.item-btn {
margin-top: 10px;
margin-left: 100px;
}
.item-btn #confirm,#cancel,#add_item{
background-color: darkblue;
border: none;
color: white;
text-align: center;
font-size: 20px;
border-radius: 4px;
margin-left: 30px;
}
</style> <body> <div class="title">
<h1>ApacheTrafficServer</h1>
</div> <div class="header"> <ul class="nav-title">
<li relation="index" class="active"><a href="#">LiveStat</a></li>
<li relation="bandwidth"><a href="#" >带宽统计</a></li>
<li relation="hit_ratio"><a href="#" >命中率统计</a></li>
<li relation="ret_code"><a href="#">响应码统计</a></li>
<li relation="connection"><a href="#">连接数统计</a></li>
<li relation="connection"><a href="#">回源链路检测</a></li>
<li relation="version"><a href="#">版本分布</a></li>
<li relation="server_status"><a href="#">服务器状态</a></li>
</ul> </div> <div class="content"> <div class="item" id="index">
<div class="left-menu">
<div class="item">
<div class="zone-name"><a href="#">北京电信</a></div>
<div class="con">
<a href="#"><p>beijing_ct</p></a>
<a href="#"><p>beijing2_ct</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">北京联通</a></div>
<div class="con hidden">
<a href="#"><p>beijing_cnc</p></a>
<a href="#"><p>beijing2_cnc</p></a>
<a href="#"><p>beijing3_cnc</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">上海电信</a></div>
<div class="con hidden">
<a href="#"><p>shanghai_ct</p></a>
<a href="#"><p>shanghai2_ct</p></a>
<a href="#"><p>shanghai3_ct</p></a>
<a href="#"><p>shanghai4_ct</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">广州电信</a></div>
<div class="con hidden">
<a href="#"><p>guangzhou_ct</p></a>
<a href="#"><p>guangzhou2_ct</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">武汉联通</a></div>
<div class="con hidden">
<a href="#"><p>wuhan_cnc</p></a>
<a href="#"><p>wuhan2_cnc</p></a>
<a href="#"><p>wuhan3_cnc</p></a>
</div>
</div>
</div>
<div class="detail"></div>
</div>
<div class="item hidden" id="bandwidth">
<div class="left-menu">
<div class="item">
<div class="zone-name"><a href="#">北京大区</a></div>
<div class="con">
<a href="#"><p>联通</p></a>
<a href="#"><p>电信</p></a>
<a href="#"><p>移动</p></a>
<a href="#"><p>长宽</p></a>
<a href="#"><p>铁通</p></a>
<a href="#"><p>广电</p></a>
<a href="#"><p>其他</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">上海大区</a></div>
<div class="con hidden">
<a href="#"><p>联通</p></a>
<a href="#"><p>电信</p></a>
<a href="#"><p>移动</p></a>
<a href="#"><p>长宽</p></a>
<a href="#"><p>铁通</p></a>
<a href="#"><p>广电</p></a>
<a href="#"><p>其他</p></a>
</div>
</div>
<div class="item">
<div class="zone-name"><a href="#">广州大区</a></div>
<div class="con hidden">
<a href="#"><p>联通</p></a>
<a href="#"><p>电信</p></a>
<a href="#"><p>移动</p></a>
<a href="#"><p>长宽</p></a>
<a href="#"><p>铁通</p></a>
<a href="#"><p>广电</p></a>
<a href="#"><p>其他</p></a>
</div>
</div>
</div>
<div class="detail">
<div class="info">
<button id="add">添加</button>
<table border="1" id="table">
<tr class="tr-header">
<!--<th> </th>-->
<th>IP</th>
<th>端口</th>
<th>所属部门</th>
<th>所属IDC</th>
<th>在线状态</th>
<th>服务</th>
<th>操作</th>
</tr>
<tr class="tr-data">
<!--<td><input type="checkbox"></td>-->
<td class="ip">10.0.0.1</td>
<td class="port">22</td>
<td class="department">VCDN</td>
<td class="vidc">beijing_cnc</td>
<td class="status">在线</td>
<td class="service">视频播放</td>
<td>
<button class="update">修改</button>
<span>|</span>
<button class="delete">删除</button>
</td>
</tr>
<tr class="tr-data">
<!--<td><input type="checkbox"></td>-->
<td class="ip">10.0.0.2</td>
<td class="port">33</td>
<td class="department">Cloud-calculator</td>
<td class="vidc">beijing_ct</td>
<td class="status">在线</td>
<td class="service">云计算</td>
<td>
<button class="update">修改</button>
<span>|</span>
<button class="delete">删除</button>
</td>
</tr>
<tr class="tr-data">
<!--<td><input type="checkbox"></td>-->
<td class="ip">10.0.0.3</td>
<td class="port">44</td>
<td class="department">HCDN</td>
<td class="vidc">shanghai_ct</td>
<td class="status">在线</td>
<td class="service">CDN+P2P</td>
<td>
<button class="update">修改</button>
<span>|</span>
<button class="delete">删除</button>
</td>
</tr>
</table> <div class="fade hidden">
</div>
<div class="model hidden">
<div class="item-info">
<label for="">IP:</label><input class="model_item item_ip" type="text"><br>
<label for="">端口:</label><input class="model_item item_port" type="text"><br>
<label for="">所属部门:</label><input class="model_item item_depart" type="text"><br>
<label for="">所属IDC:</label><input class="model_item item_idc" type="text"><br>
<label for="">在线状态:</label><input class="model_item item_online" type="text"><br>
<label for="">服务:</label><input class="model_item item_service" type="text"><br>
</div>
<div class="item-btn">
<input type="button" value="更新" id="confirm">
<input type="button" value="取消" id="cancel">
</div>
</div> </div>
</div>
</div>
<div class="item hidden" id="hit_ratio">
<div class="left-menu">
<h1>hit_ratio</h1>
</div>
<div class="detail">
<h1>hit_ratio</h1>
</div>
</div>
<div class="item hidden" id="ret_code">
<div class="left-menu">
<h1>ret_code</h1>
</div>
<div class="detail">
<h1>ret_code</h1>
</div>
</div>
<div class="item hidden" id="connection">
<div class="left-menu">
<h1>connection</h1>
</div>
<div class="detail">
<h1>connection</h1>
</div>
</div>
<div class="item hidden" id="version">
<div class="left-menu">
<h1>version</h1>
</div>
<div class="detail">
<h1>version</h1>
</div>
</div>
<div class="item hidden" id="server_status">
<div class="left-menu">
<h1>server_status</h1>
</div>
<div class="detail">
<h1>server_status</h1>
</div>
</div> </div> <script src="jquery-3.2.1.min.js"></script>
<script src="echarts-2.2.7/build/dist/echarts.js"></script>
<script type="text/javascript">
// 路径配置
require.config({
paths: {
echarts: 'echarts-2.2.7/build/dist'
}
});
// 使用
require(
[
'echarts',
'echarts/chart/map' // 使用地图就加载map模块,按需加载
],
function (ec) {
// 基于准备好的dom,初始化echarts图表
var myChart = ec.init(document.getElementById('index').lastElementChild);
var option = {
title : {
text: '全网卡顿情况',
subtext: '纯属虚构',
x:'center'
},
tooltip : {
trigger: 'item'
},
legend: {
orient: 'vertical',
x:'left',
data:['Great','Middle','Serious']
},
dataRange: {
min: 0,
max: 2500,
x: 'left',
y: 'bottom',
text:['高','低'], // 文本,默认为数值文本
calculable : true
},
toolbox: {
show: true,
orient : 'vertical',
x: 'right',
y: 'center',
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
restore : {show: true},
saveAsImage : {show: true}
}
},
roamController: {
show: true,
x: 'right',
mapTypeControl: {
'china': true
}
},
series : [
{
name: 'Great',
type: 'map',
mapType: 'china',
roam: false,
itemStyle:{
normal:{label:{show:true}},
emphasis:{label:{show:true}}
},
data:[
{name: '北京',value: Math.round(Math.random()*1000)},
{name: '天津',value: Math.round(Math.random()*1000)},
{name: '上海',value: Math.round(Math.random()*1000)},
{name: '重庆',value: Math.round(Math.random()*1000)},
{name: '河北',value: Math.round(Math.random()*1000)},
{name: '河南',value: Math.round(Math.random()*1000)},
{name: '云南',value: Math.round(Math.random()*1000)},
{name: '辽宁',value: Math.round(Math.random()*1000)},
{name: '黑龙江',value: Math.round(Math.random()*1000)},
{name: '湖南',value: Math.round(Math.random()*1000)},
{name: '安徽',value: Math.round(Math.random()*1000)},
{name: '山东',value: Math.round(Math.random()*1000)},
{name: '新疆',value: Math.round(Math.random()*1000)},
{name: '江苏',value: Math.round(Math.random()*1000)},
{name: '浙江',value: Math.round(Math.random()*1000)},
{name: '江西',value: Math.round(Math.random()*1000)},
{name: '湖北',value: Math.round(Math.random()*1000)},
{name: '广西',value: Math.round(Math.random()*1000)},
{name: '甘肃',value: Math.round(Math.random()*1000)},
{name: '山西',value: Math.round(Math.random()*1000)},
{name: '内蒙古',value: Math.round(Math.random()*1000)},
{name: '陕西',value: Math.round(Math.random()*1000)},
{name: '吉林',value: Math.round(Math.random()*1000)},
{name: '福建',value: Math.round(Math.random()*1000)},
{name: '贵州',value: Math.round(Math.random()*1000)},
{name: '广东',value: Math.round(Math.random()*1000)},
{name: '青海',value: Math.round(Math.random()*1000)},
{name: '西藏',value: Math.round(Math.random()*1000)},
{name: '四川',value: Math.round(Math.random()*1000)},
{name: '宁夏',value: Math.round(Math.random()*1000)},
{name: '海南',value: Math.round(Math.random()*1000)},
{name: '台湾',value: Math.round(Math.random()*1000)},
{name: '香港',value: Math.round(Math.random()*1000)},
{name: '澳门',value: Math.round(Math.random()*1000)}
]
},
{
name: 'Middle',
type: 'map',
mapType: 'china',
itemStyle:{
normal:{label:{show:true}},
emphasis:{label:{show:true}}
},
data:[
{name: '北京',value: Math.round(Math.random()*1000)},
{name: '天津',value: Math.round(Math.random()*1000)},
{name: '上海',value: Math.round(Math.random()*1000)},
{name: '重庆',value: Math.round(Math.random()*1000)},
{name: '河北',value: Math.round(Math.random()*1000)},
{name: '安徽',value: Math.round(Math.random()*1000)},
{name: '新疆',value: Math.round(Math.random()*1000)},
{name: '浙江',value: Math.round(Math.random()*1000)},
{name: '江西',value: Math.round(Math.random()*1000)},
{name: '山西',value: Math.round(Math.random()*1000)},
{name: '内蒙古',value: Math.round(Math.random()*1000)},
{name: '吉林',value: Math.round(Math.random()*1000)},
{name: '福建',value: Math.round(Math.random()*1000)},
{name: '广东',value: Math.round(Math.random()*1000)},
{name: '西藏',value: Math.round(Math.random()*1000)},
{name: '四川',value: Math.round(Math.random()*1000)},
{name: '宁夏',value: Math.round(Math.random()*1000)},
{name: '香港',value: Math.round(Math.random()*1000)},
{name: '澳门',value: Math.round(Math.random()*1000)}
]
},
{
name: 'Serious',
type: 'map',
mapType: 'china',
itemStyle:{
normal:{label:{show:true}},
emphasis:{label:{show:true}}
},
data:[
{name: '北京',value: Math.round(Math.random()*1000)},
{name: '天津',value: Math.round(Math.random()*1000)},
{name: '上海',value: Math.round(Math.random()*1000)},
{name: '广东',value: Math.round(Math.random()*1000)},
{name: '台湾',value: Math.round(Math.random()*1000)},
{name: '香港',value: Math.round(Math.random()*1000)},
{name: '澳门',value: Math.round(Math.random()*1000)}
]
}
]
};
myChart.setOption(option);
}
);
</script>
<script> // 左侧菜单栏点击事件
$(".zone-name").click(function () {
$(this).next().removeClass("hidden");
$(this).parent().siblings().children(".con").addClass("hidden");
});
// 点击左侧菜单的子标签事件
$(".con a p").click(function () {
alert($(this).text());
});
// tab切换
$(".nav-title li").click(function () {
// 更改 title 的背景色
$(this).addClass("active");
$(this).siblings().removeClass("active"); // 更改title对应的content显示
// 通过在 li 标签里埋了一个自定义属性,对应到content里面id值
var $id_val = $(this).attr("relation");
var $sel = "#" + $id_val; // 拼接字符串
$($sel).removeClass('hidden');
$($sel).siblings().addClass('hidden');
});
// 删除数据
$(".delete").click(function () {
$(this).parent().parent().remove();
});
// 取消
$("#cancel").click(function () {
$(this).parent().parent().addClass("hidden");
$(this).parent().parent().prev().addClass("hidden");
});
function empty_run() {
// 清空model里面的数据
$(".model_item").each(function(i,ele){
$(this).val("")
})
}
// 判断是否有空值
function is_Empty() {
var flag = 0;
$(".model_item").each(function (i) {
if($(this).val()){
flag++;
}
});
if (6 == flag){
return true;
}
else {
return false;
}
}
// 修改数据
$(".update").click(function () {
var confirm_option = $(this).parent().parent();
remove_hidden();
confirm_run(confirm_option);
});
// 添加一条数据
$("#add").click(function () {
empty_run();
$("#confirm").prop("value","添加");
$("#confirm").val("添加");
remove_hidden();
confirm_run();
$("#confirm").prop("value","更新");
$("#confirm").val("更新");
});
function confirm_run(option_obj) {
if($("#confirm").val() == "更新"){
// 获取当前数据并显示到修改框里
$(".model_item").each(function (k) {
$(this).val(option_obj.children().eq(k).text());
});
console.log(123);
// 这一步解绑定非常重要,不然会导致连续操作时候发生点击一次,执行多次的bug
$("#confirm").off("click");
$("#confirm").click(function () {
// alert(999);
if(option_obj){
// alert("ERR");
$(".model_item").each(function (k) {
option_obj.children().eq(k).text($(this).val());
});
add_hidden();
}
});
}
else if ($("#confirm").val() == "添加"){
console.log('11111');
// clone
var $new_item = $(".tr-data:first").clone();
// 这一步解绑定非常重要,不然会导致连续操作时候发生点击一次,执行多次的bug
$("#confirm").off("click");
$("#confirm").click(function () {
if (is_Empty()){
if ($new_item){
// alert('添加');
//获取填写标签对应的四个value
$(".model_item").each(function(i){
$new_item.find("td").eq(i).text($(this).val())
});
// 追加
$("#table").append($new_item);
add_hidden();
// 事件委派 -> 解决新添加的标签事件绑定失败的问题
$("#table").on("click", ".delete", function () {
$(this).parent().parent().remove();
});
// 事件委派 -> 解决新添加的标签事件绑定失败的问题
$("#table").on("click", ".update", function () {
$(".update").click(function () {
var confirm_option = $(this).parent().parent();
remove_hidden();
confirm_run(confirm_option);
});
})
}
}
else {
alert("不能存在空值!!!");
add_hidden();
}
});
}
else {
alert($("#confirm").val())
}
}
function remove_hidden() {
// 显示遮罩层
$(".fade").removeClass("hidden");
// 显示修改框
$(".model").removeClass("hidden");
}
function add_hidden() {
// 显示遮罩层
$(".fade").addClass("hidden");
// 显示修改框
$(".model").addClass("hidden");
} </script> </body>
</html>
前端基础之JQuery - day15的更多相关文章
- 前端基础之:JQuery(可编辑版)
前端基础之jquery 一 jQuery是什么? [1] jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. [2] ...
- 进击的Python【第十六章】:Web前端基础之jQuery
进击的Python[第十六章]:Web前端基础之jQuery 一.什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多&quo ...
- 前端第四篇---前端基础之jQuery
前端第四篇---前端基础之jQuery 一.jQuery介绍 二.jQuery对象 三.jQuery基础语法 四.事件 五.动画效果 六.补充each 一.jQuery简介 1.jQuery介绍 jQ ...
- Python学习(二十三)—— 前端基础之jQuery
转载自http://www.cnblogs.com/liwenzhou/p/8178806.html 一.jQuery入门 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQue ...
- 前端基础 之 jQuery
浏览目录 jQuery介绍 jQuery的优势 jQuery对象 jQuery内容 一.jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户 ...
- 四丶前端基础之jquery
知识预览 一 jQuery是什么? 二 什么是jQuery对象? 三 寻找元素(选择器和筛选器) 四 操作元素(属性,css,文档处理) 扩展方法 (插件机制) 回到顶部 一 jQuery是什么? [ ...
- 前端基础之jQuery
JavaScript和jQuery的区别 JavaScript是一门编程语言,我们用它来编写客户端浏览器脚本 jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化java ...
- 前端基础(jQuery)
jquery: JS Bootstrap jquery: write less do more jquery对象: Jquery.方法 ======= $.方法 jquery的基础语法:$(selec ...
- 前端基础之jQuery(Day55)
阅读目录 一 jQuery是什么? 二 什么是jQuery对象? 三 寻找元素(选择器和筛选器) 四 操作元素(属性,css,文档处理) 扩展方法 (插件机制) 一. jQuery是什么? [1] ...
随机推荐
- 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)
[UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- Nginx+Tomcat-cluster构建
-----------ReProxy-------------------------Client-----------192.168.56.202 nginx 192.168.56.200 Tomc ...
- empty() 与 html("") 的区别
empty,首先循环给后代元素移除绑定.清除jquery给此dom的cache,然后循环removeFirstChild. 而html(''),则是简单暴力的设置innerHTML = ''; 查看文 ...
- FindExecutable:查找与一个指定文件关联在一起的程序的文件名
百度百科:http://baike.baidu.com/view/1285880.htm ------------------------------------------------------- ...
- Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)
ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...
- memset()函数及其作用(转)
1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c:是赋给buffer的值, c ...
- java的集合
Collection: 1.list ArrayList.Vector.LinkedList ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. Vector是 ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...
- POJ 2976 Dropping tests(01分数规划)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions:17069 Accepted: 5925 De ...