Python django/flask Web开发入门(五)——JavaScript入门
今日学习内容:JavaScript入门
1.初识JavaScript
是一门编程语言,可以让程序实现一些动态效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.menus{
width: 200px;
border: 2px solid red;
}
.header{
background-color: gold;
padding: 20px 10px;
}
</style>
</head>
<body>
<div class="menus">
<div class="header" onclick="myFun()">大标题</div>
<div class="item">内容</div>
</div>
<script type="text/javascript">
function myFun(){
confirm("是否要继续?")
}
</script>
</body>
</html>
2.js存放的位置
1.(html)页面中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.menus{
width: 200px;
border: 2px solid red;
}
.header{
background-color: gold;
padding: 20px 10px;
}
</style>
<script>
// 位置1 先执行
</script>
</head>
<body>
<div class="menus">
<div class="header" onclick="myFun()">大标题</div>
<div class="item">内容</div>
</div>
<script type="text/javascript">
function myFun(){
confirm("是否要继续?")
// 位置2 后执行 推荐放在这个位置
}
</script>
</body>
</html>
2.js文件
导入:
<script src="111.js"></script> # 建议放在位置2
3.js的语法
(1)变量定义
在网页中用script标签定义一段js代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.menus{
width: 200px;
border: 2px solid red;
}
.header{
background-color: gold;
padding: 20px 10px;
}
</style>
<script src="111.js"></script>
</head>
<body>
<div class="menus">
<div class="header" onclick="myFun()">大标题</div>
<div class="item">内容</div>
</div>
<script src="111.js"></script>
<script type="text/javascript">
var name="hello world!" //定义
console.log(name)
</script>
</body>
</html>
上述代码除了显示html页面之外,会在网页的console中输出一个name变量的内容,效果如下:
(2)字符串类型
声明一个字符串:
<script type="text/javascript">
var name="中国联通";
var v1 = name.length; //name字符串的长度
var v2 = name[0]; //中
var v3 = name.trim() //去除空白
var v4 = name.substring(0,2) //前取后不取 中国
</script>
案例一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span id="text">欢迎中国联通领导高倩莅临指导</span>
<script type="text/javascript">
function show(){
//html中找到某个标签并获取它的内容(DOM)
var tag = document.getElementById("text");
var dataString = tag.innerText;
console.log(dataString);
//动态起来,把文本中的第一个字符放在字符串的最后面
var firstChar = dataString[0];
var otherString = dataString.substring(1, dataString.length);
var newText = otherString + firstChar;
console.log(newText);
// 在html标签中更新内容
tag.innerText = newText;
}
//JavaScript中的定时器
setInterval(show, 1000) //每一秒执行一次show函数
</script>
</body>
</html>
上述案例实现“欢迎中国联通领导高倩莅临指导”在网页中滚动播放。
(3)数组类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var v1 = [11,22,33,44]; //数组
var v2 = Array([11,22,33,44]); //同上
v1[0];
v2[1] = "高倩"; //设置v2数组索引为1的值为高倩 [11,“高倩”,33,44]
v1.push("联通"); //尾部追加 [11,22,33,44,"联通"]
v1.unshift("移动"); //首部追加 ["移动",11,22,33,44]
v1.splice(1,0,"电信"); //splice(索引,0,元素)在索引处插入 [11,"电信",22,33,44]
v1.pop(); // 尾部删除
v1.shift(); //首部删除
v1.splice(2,1) ; //splice(索引,1)删除索引处的元素,[11,22,44]
//数组的循环
for (var index in v1){
// index是v1的索引0,1,2,3......获取数据用v1[index]
// 等同于 for (var i=0;i<v1.length;i++){}
}
</script>
</body>
</html>
案例二:动态生成页面数据
使用javascript的document将数组放到ul标签中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul id="city">
</ul>
<script>
var cityList=["北京", "上海", "深圳"];
for(var idx in cityList){
var text = cityList[idx];
//创建了一个li标签,没有内容
var tag = document.createElement("li");
//在li标签中写入内容
tag.innerText = text;
//li标签添加到id=city的标签里面
var parentTag = document.getElementById("city"); //找到标签为city的tag
parentTag.appendChild(tag); //parent标签里面增加child,就是tag
}
</script>
</body>
</html>
效果:
(4)对象(python中的字典dict)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
info = {
"name": "张三",
"age": 18
}
//或
info1 = {
name: "李四",
age: 19
}
//操作
var x1 = info.age; //读取info中age的值 18
info.name = "王五"; //设置info中name的值等于“王五”
var x2 = info1["age"]; //读取info1中age的值 19
info1["name"] = "赵六"; //设置info1中name的值等于“赵六”
delete info["age"]; //删除info中age键值对
for(var key in info){
// key=name/age data=info[key]获取key对应的值
}
</script>
</body>
</html>
案例三:用js自动生成tr标签,读取对象填充网页表格数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody id="body"></tbody>
</table>
<script type="text/javascript">
var dataList = [
{id: "1", name:"张三", age:18},
{id: "2", name:"李四", age:68},
{id: "3", name:"王五", age:48},
{id: "4", name:"赵六", age:38}
]
for(var idx in dataList){
info = dataList[idx];
var tr = document.createElement("tr");
for(var key in info){
var text = info[key];
var td = document.createElement("td");
td.innerText = text;
tr.appendChild(td)
}
var body = document.getElementById("body");
body.appendChild(tr);
}
</script>
</body>
</html>
效果:
(5)条件语句和函数 (需要注意格式),会写python代码的这里就不再阐述了。可以搜索其他教程。
4.DOM模块
是javascript的一个模块,可以对html界面中的标签进行操作。
(1)功能回顾
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
// 获取网页中id=xx的标签
var tag = document.getElementById("xx");
//读取tag中的内容;
tag.innerText;
//设置tag中的内容(id=xx)
tag.innerText = "test";
//创建类型为div的标签
var tag1 = document.createElement("div");
</script>
</body>
</html>
(2)事件
单击事件——添加固定的值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" value="点击添加" onclick="addCityInfo()">
<ul id="city"></ul>
<script type="text/javascript">
function addCityInfo(){
var cityTag = document.createElement("li");
cityTag.innerText = "北京";
var parentTag = document.getElementById("city");
parentTag.appendChild(cityTag);
}
</script>
</body>
</html>
每次点击按钮都会添加一个li标签,增加固定的内容“北京”,效果:
单击事件——添加用户输入的值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" placeholder="请输入内容" id="textInput">
<input type="button" value="点击添加" onclick="addText()">
<ul id="tianjia"></ul>
<script type="text/javascript">
function addText(){
//找到输入框标签
var textTag = document.getElementById("textInput");
//获取标签中的值
var newString = textTag.value;
//判断用户输入是否为空
if (newString.length>0){
//创建li标签
var liTag = document.createElement("li");
//将输入值加到标签中
liTag.innerText = newString;
//将li标签加入到ul标签中
var parentTag = document.getElementById("tianjia");
parentTag.appendChild(liTag);
//添加后将文本框置空
textTag.value = "";
}else {
alert("输入值不能为空!")
}
}
</script>
</body>
</html>
实现单击添加按钮可以实现添加用户输入的值,不能为空,否则报错提示。
5.第三方库JQuery
jQuery是一个javaScript第三方模块。基于javaScript,自己开发一个功能;现成的工具,依赖jQuery,例如bootstrap动态效果。
(1)初识jquery
运用jquery实现标签中内容的读取和修改:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="txt">中国联通</h1>
<script src="jquery-3.71.min.js"></script>
<script type="text/javascript">
//利用jquery中的功能实现某些效果
$("#txt").text("广西联通");
</script>
</body>
</html>
(2)寻找标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="txt" class="c1">中国移动</h1>
<div class="c1">中国联通</div>
<h1 class="c1">中国电信</h1>
<div>
<div>
<div>北京</div>
<div id="shanghai">上海</div>
<div>广州</div>
<div>天津</div>
</div>
<div>
<div>陕西</div>
<div id="shanxi">山西
<div>孩子1</div>
<div class="haizi2">孩子2</div>
<div>孩子3</div>
</div>
<div>四川</div>
<div>西藏</div>
</div>
</div>
<script type="text/javascript">
//1.直接寻找
$("#txt") //基于id选择
$(".c1") //基于类选择,所有的h1标签都会被选中
$("div") //标签选择器,选中所有的div
$(".c1 .c2 a") //层级选择器,找class=c1下面class=c2里的a标签
$("#c1, #c2, li") //多选择器,找到符合c1和c2和li标签的
$("input[name='n1']") //属性选择器,找到input类里面name等于n1的
//2.间接寻找(找兄弟)
$("#shanghai") //找到上海这个div
$("#shanghai").prev() //找到上海的前一个div 北京
$("#shanghai").next() //找到上海的后一个div 广州
$("#shanghai").next().next() //找到上海的后一个后一个div 天津
$("#shanghai").siblings() //找到所有的兄弟
//3.间接寻找(找父子)
$("#shanxi") //找到山西的div
$("#shanxi").parent() //父亲div
$("#shanxi").parent().parent() //父亲div的父亲div
$("#shanxi").children() //所有的孩子
$("#shanxi").children(".haizi2") //所有的孩子中寻找class=haizi2的
$("#shanxi").find(".haizi2") //在所有子孙中寻找class=haizi2的标签
$("#shanxi").find("div") //在所有子孙中寻找div标签
</script>
</body>
</html>
案例四:菜单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.menus{
width: 200px;
height: 800px;
border: 2px solid red;
}
.menus .header{
background-color: gold;
padding: 10px 5px; /* 上下10px;左右5px */
border-bottom: 1px dotted #dddddd;
cursor: pointer;
}
.menus .content a{
display: block;
padding: 5px 5px;
border-bottom: 1px dotted #dddddd;
}
.hide{
display: none;
}
</style>
</head>
<body>
<div class="menus">
<div class="header" onclick="clickMe(this);">上海</div> <!--this代表当前点击的标签 -->
<div class="content hide">
<a>宝山区</a>
<a>青浦区</a>
<a>浦东新区</a>
<a>普陀区</a>
</div>
<div class="header" onclick="clickMe(this);">北京</div>
<div class="content hide">
<a>海淀区</a>
<a>朝阳区</a>
<a>大兴区</a>
<a>昌平区</a>
</div>
</div>
<script src="jquery-3.71.min.js"></script>
<script>
function clickMe(self){
//self代表当前点击的标签
var hasHide = $(self).next().hasClass("hide");
if (hasHide){
$(self).next().removeClass("hide");
}else{
$(self).next().addClass("hide");
}
}
</script>
</body>
</html>
案例进阶:只允许当前一个header下面的content处于展开状态:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.menus{
width: 200px;
height: 800px;
border: 2px solid red;
}
.menus .header{
background-color: gold;
padding: 10px 5px; /* 上下10px;左右5px */
border-bottom: 1px dotted #dddddd;
cursor: pointer;
}
.menus .content a{
display: block;
padding: 5px 5px;
border-bottom: 1px dotted #dddddd;
}
.hide{
display: none;
}
</style>
</head>
<body>
<div class="menus">
<div class="item">
<div class="header" onclick="clickMe(this);">上海</div> <!--this代表当前点击的标签 -->
<div class="content hide">
<a>宝山区</a>
<a>青浦区</a>
<a>浦东新区</a>
<a>普陀区</a>
</div>
</div>
<div class="item">
<div class="header" onclick="clickMe(this);">上海</div> <!--this代表当前点击的标签 -->
<div class="content hide">
<a>宝山区</a>
<a>青浦区</a>
<a>浦东新区</a>
<a>普陀区</a>
</div>
</div>
<div class="item">
<div class="header" onclick="clickMe(this);">上海</div> <!--this代表当前点击的标签 -->
<div class="content hide">
<a>宝山区</a>
<a>青浦区</a>
<a>浦东新区</a>
<a>普陀区</a>
</div>
</div>
<div class="item">
<div class="header" onclick="clickMe(this);">上海</div> <!--this代表当前点击的标签 -->
<div class="content hide">
<a>宝山区</a>
<a>青浦区</a>
<a>浦东新区</a>
<a>普陀区</a>
</div>
</div>
</div>
<script src="jquery-3.71.min.js"></script>
<script>
function clickMe(self){
//让自己的下一个div显示出来
$(self).next().removeClass("hide");
//找到所有父亲的兄弟标签中class=content的标签,增加hide,有的不会重复添加
$(self).parent().siblings().find(".content").addClass("hide");
}
</script>
</body>
</html>
(3)值的操作
jquery中值的基础操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="c1">内容</div>
<input type="text" id="c2"/>
<script src="jquery-3.71.min.js"></script>
<script>
$("#c1").text //获取文本内容
$("#c1").text("休息") //设置文本内容
$("#c2").val() //获取用户输入的值
$("#c2").val("哈哈哈") //设置值
</script>
</body>
</html>
案例五:
获取用户输入的值并创建li显示在下方:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" id="txtUser" placeholder="用户名">
<input type="text" id="txtEmail" placeholder="邮箱">
<input type="button" value="提交" onclick="getInfo()">
<ul id="view"></ul>
<script src="jquery-3.71.min.js"></script>
<script>
function getInfo(){
//获取用户输入的用户名和密码
var username = $("#txtUser").val();
var email = $("#txtEmail").val();
var dataString = username + "-" + email;
//创建标签写入内容
var newLi = $("<li>").text(dataString);
$("#view").append(newLi);
}
</script>
</body>
</html>
效果:
(4)事件绑定
批量绑定事件-点击并获取文本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>百度</li>
<li>谷歌</li>
<li>搜狗</li>
</ul>
<script src="jquery-3.71.min.js"></script>
<script>
$("li").click(function (){
//点击li标签就会自动执行这个函数
// $(this) 是指当前点击的标签
var text = $(this).text()
console.log(text)
})
</script>
</body>
</html>
批量绑定事件-点击删除标签:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>百度</li>
<li>谷歌</li>
<li>搜狗</li>
</ul>
<script src="jquery-3.71.min.js"></script>
<script>
$("li").click(function (){
//点击li标签就会自动执行这个函数
// $(this) 是指当前点击的标签
$(this).remove(); //点谁删除谁
})
</script>
</body>
</html>
当页面框架加载完成之后执行代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>百度</li>
<li>谷歌</li>
<li>搜狗</li>
</ul>
<script src="jquery-3.71.min.js"></script>
<script>
$(function(){
//框架加载完成之后就执行
$("li").click(function (){
//点击li标签就会自动执行这个函数
// $(this) 是指当前点击的标签
$(this).remove();
})
})
</script>
</body>
</html>
案例六:表格操作
以下案例实现删除表格,点击哪一行就删除哪一行。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>标题</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>内容1</td>
<td>
<input type="button" value="删除">
</td>
</tr>
<tr>
<td>2</td>
<td>内容2</td>
<td>
<input type="button" value="删除">
</td>
</tr>
<tr>
<td>3</td>
<td>内容3</td>
<td>
<input type="button" value="删除">
</td>
</tr>
<tr>
<td>4</td>
<td>内容4</td>
<td>
<input type="button" value="删除">
</td>
</tr>
</tbody>
</table>
<script src="jquery-3.71.min.js"></script>
<script>
$("#tbody, input").click(function(){
$(this).parent().parent().remove();
})
</script>
</body>
</html>
作者:Oman_superman