JS的循环
for 循环
常规for 循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
for(var i=11;i>10;i++){ //var i=0 声明变量i i<10条件表达式 i++ 自增,每次运算作为一次循环
document.write(i);
console.log(i)
}
</script>
</body>
</html>
for in 循环
<script>
var string = "abcdef";
for(var i in string){//在js当中for in循环返回的是索引
document.write(string[i]);
console.log(string[i])
}
</script>
while 循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var a = 1;
while(a < 10){ //每次执行循环体内部的内容,到条件不满足
a++;
console.log(a)
}
while(1===1){
}
</script>
</body>
</html>
嵌套循环
外层循环一次,内层循环一遍。
百家姓
起名字。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var last_name = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨";
var first_name = ['满', '琳', '锐', '艺博', '辰硕', '鸿轩', '涵润', '涵涵', '兴', '淳曦', '雨微',];
for(var i in last_name){
l_name = last_name[i];
for(var j in first_name){
f_name = first_name[j];
document.write("<h3>"+l_name+f_name+"</h3>")
}
}
</script>
</body>
</html>
JS函数
函数是具有某种功能的代码块,就是将某个功能的代码包裹起来,然后进行命名,下次使用这个功能采用名称来调用,提高了代码的复用能力和可维护性。
函数的定义
js同样具有函数编程能力,格式如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function say_hello() {
var c_header = "<p style='color: red;font-size: 50px;font-weight: 900;'>";
var content = "hello world";
var c_fonter = "</p>";
document.write(c_header+content+c_fonter)
}
</script>
</body>
</html>
function:类似python的def,是定义函数的关键字。
say_hello: 函数名,代表函数本身。
():参数括号,形参括号
{}:函数体
{}内部: 函数的内容,功能
一定要区分函数和函数调用。
函数是一种代码结构,但是函数的调用是在函数名称后面加()进行调用。
函数在没有调用之前不会执行。
函数的参数
参数可以理解为在定义函数时定义,在调用函数时传递的,函数内部的局部变量。
总的来说,参数分为:
形参:定义函数的时候定义的参数,name
实参:调用函数的时候传递的参数,张三,李四
<script>
function say_hello(name) {
var c_header = "<p style='color: red;font-size: 50px;font-weight: 900;'>";
var content = "hello world I am "+name;
var c_fonter = "</p>";
document.write(c_header+content+c_fonter)
}
say_hello("张三"); //调用函数
say_hello("李四") //调用函数
</script>
1、在js当中,形参和实参的位置是对应的,但是数量不是。
2、在js的函数内部有一个内置的变量,arguments,里面包含了所有实参和函数本身。
3、js也支持和python一样的默认值参数。
function say_hello(name,age=18) {
console.log(arguments);
var c_header = "<p style='color: red;font-size: 50px;font-weight: 900;'>";
var content = "hello world I am "+name+" I am "+age +" years old";
var c_fonter = "</p>";
document.write(c_header+content+c_fonter)
}
say_hello("张三"); //调用函数
函数返回值
js函数的返回值和python一样
function say_hello(name,age) {
var c_header = "<p style='color: red;font-size: 50px;font-weight: 900;'>";
var content = "hello world I am "+name+" I am "+age +" years old";
var c_fonter = "</p>";
var result = c_header+content+c_fonter;
return result;
}
var value = say_hello("张三",18); //调用函数
document.write(value);
alert(value);
console.log(value)
JS的对象
对象定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//方法一
var obj = new Object();
obj.name = "张三";
obj.age = 18;
console.log(obj)
//方法一
var obj = {
name: "张三",
age: 18,
say_hello: function () {
console.log("hello world")
}
};
console.log(obj);
console.log(typeof(obj));
obj.say_hello()
</script>
</body>
</html>
this的使用
this参数指代是调用这个函数的对象,默认是窗口调用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="say_hello(this)">按钮</button>
<script>
function say_hello() {
console.log(this);
} //定义say_hello 函数,函数返回内置this参数
say_hello(); //直接调用say_hello 浏览器认为window窗口在调用
var obj = new Object(); //实例化一个对象
obj.name = "我是obj";
obj.say = say_hello; //将say_hello函数传递给对象作为方法
obj.say() //obj调用say_hello
</script>
</body>
</html>
重点:
1、会定义JS的对象
2、掌握this表里具体指代对象
JS DOM操作
DOM介绍
DOM(document object model) 文档对象模型,就是在JS当中对HTML进行操作的一个对象,在代码当中体现在内置的变量document上。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="#">这是个a标签</a>
<a href="#">这是个a1标签</a>
<img src="l.jpg">
<script>
console.log(document);
console.log(document.all);
console.log(document.images);
console.log(document.links);
</script>
</body>
</html>
上述的方法,给JS提供了获取HTML标签的可能,但是还是比较复杂,所以,JS的document对象也封装了一些选择器方法来获取HTML标签。
DOM选择器
ID选择器:document.getElementById
通过id获取单个标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="div_id">
1
</div>
<div id="div_id1">
2
</div>
<div id="div_id2">
3
</div>
<script>
var div_obj = document.getElementById("div_id");
console.log(div_obj)
</script>
</body>
</html>
class选择器:document.getElementsByClassName
通过class名称获取多个标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="div_class">
1
</div>
<div class="div_class">
2
</div>
<div class="div_class">
3
</div>
<script>
var div_obj = document.getElementsByClassName("div_class");
console.log(div_obj)
</script>
</body>
</html>
标签选择器:document.getElementsByTagName
通过标签名称获取多个HTML元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
1
</div>
<div>
2
</div>
<div>
3
</div>
<p>
4
</p>
<script>
var div_obj = document.getElementsByTagName("p");
console.log(div_obj)
</script>
</body>
</html>
属性选择器:document.getElementsByName
通过name属性值来获取HTML元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<input type="checkbox" name="nice"> 1
<input type="checkbox" name="nice"> 2
<input type="checkbox" name="nice"> 3
<input type="checkbox" name="nice"> 4
<br>
<input type="checkbox" name="so_nice"> a
<input type="checkbox" name="so_nice"> b
<input type="checkbox" name="so_nice"> c
<input type="checkbox" name="so_nice"> d
</form>
<script>
var obj = document.getElementsByName("so_nice");
console.log(obj)
</script>
</body>
</html>
JS修改HTMl样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
<li>i</li>
</ul>
<script>
var obj_list = document.getElementsByTagName("li");
console.log(obj_list);
// for(var i in obj_list){
// obj = obj_list[i];
// obj.style.listStyle = "none"
// }
for(var i in obj_list){
obj = obj_list[i];
if(i%2 == 1){
obj.style.backgroundColor = "#F3F3F3"
}else {
obj.style.backgroundColor = "#777777"
}
}
</script>
</body>
</html>
JS修改HTML的属性
attribute 属性
方法 | 描述 |
---|---|
hasAttributes | 判断是否有属性 |
hasAttribute | 判断是否有指定的属性 |
setAttribute | 设置属性 |
getAttribute | 获取属性值 |
removeAttribute | 删除属性 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.nice {
font-size: 32px;
font-family: "Microsoft YaHei UI Light";
color: orange;
}
</style>
</head>
<body>
<div zhangsan="帅">
123
</div>
<script>
// var obj = document.getElementsByTagName("div")[0];
// console.log(obj.hasAttributes())
</script>
<script>
// var obj = document.getElementsByTagName("div")[0];
// console.log(obj.hasAttribute("zhangsan"))
</script>
<script>
// var obj = document.getElementsByTagName("div")[0];
// obj.setAttribute("zhangsan","酷");
// obj.setAttribute("id","zhang");
// obj.setAttribute("class","nice");
</script>
<script>
// var obj = document.getElementsByTagName("div")[0];
// var lb = obj.getAttribute("zhangsan");
// console.log(lb)
</script>
<script>
var obj = document.getElementsByTagName("div")[0];
obj.removeAttribute("zhangsan");
</script>
</body>
</html>
JS操作文本
方法 | 描述 |
---|---|
innerHTML | 向指定的DOM对象当中添加HTML内容 |
innerText | 向指定的DOM对象当中添加文本内容 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="div_id">
</div>
<script>
var div = document.getElementById("div_id");
var obj = "<p style='color: red;font-size: 24px'>"+"hello world"+"</p>";
div.innerText = obj;
div.innerHTML = obj;
</script>
</body>
</html>
对与同一段内容,不可以同时或者重复进行添加。
JS操作元素
方法 | 描述 |
---|---|
createElement | 创建文档对象 |
createTextNode | 创建文本节点 |
cloneNode | 克隆节点 |
removeChild | 删除节点 |
appendChild | 在元素内部追加节点 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="borderd">
</div>
<script>
var borderd = document.getElementById("borderd"); //获取div
var div = document.createElement("div"); // 创建文档对象
div.style.color = "red"; //是在对象的样式
var text = document.createTextNode("创建文本节点"); //创建了文本节点
div.appendChild(text); //将文本节点添加到创建的div文档对象当中
borderd.appendChild(div); //将div文档对象添加到了border div当中
console.log(div)
</script>
</body>
</html>
删除节点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="borderd">
<span id="span_id">我就是一个span</span>
</div>
<script>
// var borderd = document.getElementById("borderd"); //获取div
// var div = document.createElement("div"); // 创建文档对象
// div.style.color = "red"; //是在对象的样式
// var text = document.createTextNode("创建文本节点"); //创建了文本节点
// div.appendChild(text); //将文本节点添加到创建的div文档对象当中
// borderd.appendChild(div); //将div文档对象添加到了border div当中
// console.log(div);
var span = document.getElementById("span_id");
borderd.removeChild(span) //删除子元素
</script>
</body>
</html>
克隆节点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="borderd">
<span id="span_id">我就是一个span</span>
</div>
<script>
var border = document.getElementById("borderd");
var span = document.getElementById("span_id");
var clone_span = span.cloneNode(true);
clone_span.setAttribute("id","span_id1");
border.appendChild(clone_span)
</script>
</body>
</html>
JS事件
我们学会了如何使用js编写基本代码逻辑,比如:循环,判断
我们也学会了使用js如何获取HTML的元素
我们又学会了获取元素后修改元素的:样式,属性,文本,元素
但是,没有办法设定在什么情况下执行这件事情。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--点击按钮span文字变大-->
<button id="button">按钮</button>
<span id="span">这个span</span>
<script>
var b = document.getElementById("button");
var s = document.getElementById("span");
b.onclick = function () {
s.style.fontSize = "300px"
}
</script>
</body>
</html>
通常会将时间和一个对象绑定,比如按钮点击,文字经过,还有可能就是键盘按下。
JS的一些事件函数
①、页面事件:
onload 页面加载事件(页面打开后执行)
onunload 页面卸载事件(页面关闭时执行)
②、鼠标事件:
onlick 单击
ondblclick 双击
onmousedown 按下
onmouseup 抬起
onmouseover 移入
onmouseout 移出
onmouseenter 移入
onmouseleave 移出
onmousemove 移动
oncontextmenu 右键单击
③、键盘事件:
onkeyup 抬起
onkeydown 按下
onkeypress 按下+抬起
④、其他事件(一般用于表单):
onsubmit 表单提交事件(一般用于表单验证)
onchange 改变 (一般用于下拉列表)
onblur 失去焦点
onfocus 获取焦点