Javascript

苑昊

Python开发【第十二篇】:DOM

 

ECMAScript是标准,javascript是实现


JS组成 
JS = ECMAScript + DOM + BOM

ECMAScript(前身为欧洲计算机制造商协会) 
JavaScript的语法规范 
DOM(Document Object Model 的简称) 
JavaScript操作网页上元素的API 
BOM(Browser Object Model 的简称) 
JavaScript操作浏览器部分功能的API

一. JavaScript

  • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的. 
#直接编写
    <script>
        alert('hello yuan')
    </script>
    
#导入文件
    <script src="hello.js"></script> 

 

一个HTML网页要做到结构、样式、行为相分离

三个常用的输出语句:

document.write(“要输出的内容”)

作用:

l  它主要是用来向body标签中输出write()小括号里面的内容

l  document它表示是当前的HTML文档对象

l  write在英文中是“写”的意思

l  对象是由属性与方法组成的   对象.属性与对象.方法  从视觉上面来区分属性与方法 属性不带小括号  方法带有小括号

l  write它是一个输出的方法

window.alert(“要输出的内容”)

作用:

l  它主要是用来向当前的浏览器窗口中弹出一个警告提示框

l  window它表示的是当前的浏览器窗口对象  window对象是js中最顶级的对象  可以省略不写 

l  alert在英文是“警告”的意思  

n  var 变量名1,变量名2    一次声明多个变量

 

修改变量的值

声明一个变量已经给其赋了值  然后再来修改这个变量的值!

格式:

         变量名 = “新值”  //给变量名重新赋一个值

 

 

//单行注释

/*
多行注释
*/
//语句必须已分号结束
//声明变量名关键字:var 变量名="值"
//JS属于动态类型(同一个变量可以存不同类型数据,如下)
//JS的变量名可以使用_,数字,字母,$组成,不能以数字开头。
//变量名是区分大小写的,推荐使用驼峰式命名规则,保留字不能用做变量名。
var name = "zc";
var age = 29;
var $ = "男";
console.log("name:",name);
console.log("age:",age);
console.log("$:",$);

JavaScript数据类型:

JavaScript拥有动态类型

var x;  // 此时x是undefined
var x = 1;  // 此时x是数字
var x = "Alex"  // 此时x是字符串 

变量的数据类型分为:两大类、七小种

两大类:基本数据类型(标量数据类型)、复合数据类型!

基本数据类型:只能存储一个值

复合数据类型:至少存储一个值,可以存储多个值

 

数值(Number)

JavaScript不区分整型和浮点型,就只有一种数字类型。

var a = 12.34;
var b = 20;
var c = 123e5;  // 12300000
var d = 123e-5;  // 0.00123

还有一种NaN,表示不是一个数字(Not a Number)。

常用方法:

parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456")  // 返回123.456

字符串(String)

var a = "Hello"
var b = "world;
var c = a + b; 
console.log(c);  // 得到Helloworld

常用方法:

方法说明
.length返回长度
.trim()移除空白
.trimLeft()移除左边的空白
.trimRight()移除右边的空白
.charAt(n)返回第n个字符
.concat(value, ...)拼接
.indexOf(substring, start)子序列位置
.substring(from, to)根据索引获取子序列
.slice(start, end)切片
.toLowerCase()小写
.toUpperCase()大写
.split(delimiter, limit)分割

 

 

 

 

 

 

string.slice(start, stop)和string.substring(start, stop):

两者的相同点:
如果start等于end,返回空字符串
如果stop参数省略,则取到字符串末
如果某个参数超过string的长度,这个参数会被替换为string的长度

substirng()的特点:
如果 start > stop ,start和stop将被交换
如果参数是负数或者不是数字,将会被0替换

silce()的特点:
如果 start > stop 不会交换两者
如果start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符)
如果stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)

slice和substring的区别
substirng()的特点

布尔值(Boolean):

""(空字符串)、0、null、undefined、NaN都是false。 

null和undefined

  • null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
  • undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。

null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。

对象(Object):

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

数组

数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

 

JS中的排序(不要使用sort,鸡肋):

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

function sortNumber(a,b){
return a - b
}
var arr1 = [11, 100, 22, 55, 33, 44]
arr1.sort(sortNumber)
输出:  [11, 22, 33, 44, 55, 100]

 

关于遍历数组中的元素,可以使用下面的方式:

var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
  console.log(i);
}

 

 JS数据类型:

对变量或值调用 typeof 运算符将返回下列值之一:

  • undefined - 如果变量是 Undefined 类型的
  • boolean - 如果变量是 Boolean 类型的
  • number - 如果变量是 Number 类型的
  • string - 如果变量是 String 类型的
  • object - 如果变量是一种引用类型或 Null 类型的

 

 

++

自加1运算符

--

自减1运算符

注意:

         不管是前加加还是后加加自身都会自加1  不管是前减减还是后减减自身都会自减1

 

 

 

 

 

运算符分为:

算术运算符

赋值运算符

比较运算符

逻辑运算符

字符串连接运算符

三目运算符

 

 

if-else:

var a = 10;
if (a > 5){
  console.log("yes");
}else {
  console.log("no");
}

if-   else if  -else :

var a = 10;
if (a > 5){
  console.log("a > 5");
}else if (a < 5) {
  console.log("a < 5");
}else {
  console.log("a = 5");
}

switch:

var day = new Date().getDay();
switch (day) {
  case 0:
  console.log("Sunday");
  break;
  case 1:
  console.log("Monday");
  break;
default:
  console.log("...")(上面case都不满足就执行这一句)
}
switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句

for:

for (var i=0;i<10;i++) {
  console.log(i);
}

while:

var i = 0;
while (i < 10) {
  console.log(i);
  i++;
}

函数:

// 普通函数定义
function f1() {
  console.log("Hello world!");
}

// 带参数的函数
function f2(a, b) {
  console.log(arguments);  // 内置的arguments对象
  console.log(arguments.length);
  console.log(a, b);
}

// 带返回值的函数
function sum(a, b){
  return a + b;
}
sum(1, 2);  // 调用函数

// 匿名函数方式
var sum = function(a, b){
  return a + b;
}
sum(1, 2);

// 立即执行函数
(function(a, b){
  return a + b;
})(1, 2);

ES6中允许使用“箭头”(=>)定义函数:

var f = v => v;
// 等同于
var f = function(v){
  return v;
}

如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分:

var f = () => 5;
// 等同于
var f = function(){return 5};

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2){
  return num1 + num2;
}

函数中的arguments参数:

function add(a,b){
  console.log(a+b);
  console.log(arguments.length)
}

add(1,2)

#3
#2
函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回

函数的全局变量和局部变量:

局部变量

在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:

在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:

JavaScript变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。

全局变量会在页面关闭后被删除。

作用域:

首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层

1. 函数的调用 要往回找 函数的定义阶段
2. 首先在函数内部找 -> 内部找不到就往外找,直到找到全局为止

var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  
//输出结果是?
ShenZhen
var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret(); 
 // 打印结果是?
BeiJing

闭包:

var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();

ShangHai

词法分析(尝试理解):

JavaScript中在调用函数的那一瞬间,会先进行词法分析。

词法分析的过程:

当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:

1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。

函数内部无论是使用参数还是使用局部变量都到AO上找。

var age = 18;
function foo(){
  console.log(age);
  var age = 22;
  console.log(age);
}
foo();  // 
问:执行foo()之后的结果是?
22
var age = 18;
function foo(){
  console.log(age);
  var age = 22;
  console.log(age);
  function age(){
    console.log("呵呵");
  }
  console.log(age);
}
foo(); 
// 执行后的结果是? ƒ age(){ console.log("呵呵"); } 22 22
词法分析过程:
1、分析参数,有一个参数,形成一个 AO.age=undefine;
2、分析变量声明,有一个 var age, 发现 AO 上面已经有一个 AO.age,因此不做任何处理
3、分析函数声明,有一个 function age(){...} 声明, 则把原有的 age 覆盖成 AO.age=function(){...};

最终,AO上的属性只有一个age,并且值为一个函数声明

执行过程:
注意:执行过程中所有的值都是从AO对象上去寻找

1、执行第一个 console.log(age) 时,此时的 AO.age 是一个函数,所以第一个输出的一个函数
2、这句 var age=22; 是对 AO.age 的属性赋值, 此时AO.age=22 ,所以在第二个输出的是 2
3、同理第三个输出的还是22, 因为中间再没有改变age值的语句了

1. 分析(分析的函数内部变量定义过程)
  1. 先看参数
  2. 看有没有局部变量
  3. 看有没有函数定义
2. 执行(实际执行代码)

内置对象和方法:

// JS中自定义对象

// var person = {name: '小强', age: 38};
 // 在JS的对象中,键(属性)默认不用加引号;并且自动把单引号转成双引号
// console.log(person);
// // 单独取对象的属性
// console.log("name:", person.name);
// console.log("age:", person.age);
//
// // 遍历对象的属性
// for (var i in person){
//     console.log(i);
//     console.log(person[i]);
// }


// Date对象
var d1 = new Date();
console.log(d1);
console.log(typeof d1);
console.log(d1.toLocaleString());  // 转成字符串格式的本地时间
console.log(typeof d1.toLocaleString());

// 生成指定时间的Date对象
// var d2 = new Date("2004/3/20 11:12");
// console.log(d2.toLocaleString());  // 转成字符串格式的本地时间
// console.log(d2.toUTCString());  // 转成字符串格式的UTC时间

var d2 = new Date("2018-3-11 11:12");
console.log(d2.toLocaleString());  // 转成字符串格式的本地时间
console.log(d2.toUTCString());  // 转成字符串格式的UTC时间

console.log(d2.getDate());  // 获取那一天(多少号)
console.log(d2.getDay());  // 获取星期几
console.log(d2.getMonth());  // 获取月份
console.log(d2.getFullYear());  // 获取年
console.log(d2.getHours());  // 获取小时
console.log(d2.getMinutes());  // 获取分钟
console.log(d2.getSeconds());  // 获取秒
console.log(d2.getTime());  // 获取时间戳

// JSON对象
console.log("==============================");

var s = '{"name": "xiaoqiang", "age": 38}';
// 把字符串转换成JS内部的对象
var ret = JSON.parse(s);
console.log(ret);
console.log(typeof ret);
// 把JS内部的对象转换成字符串
var s2 = JSON.stringify(ret);
console.log(s2);
console.log(typeof s2);

// RegExp对象 --> Python re模块
// 生产 RegExp对象
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
var regexpRet1 = reg1.test("xiaoqiang");
console.log(regexpRet1);

var regexpRet2 = reg1.test("1xiaoqiang");
console.log(regexpRet2);

console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("xiaoqiang"));
console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("1xiaoqiang"));

// 坑1 (正则表达式中间一定不可以有空格)
console.log("============================================");
console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("xiaoqiang"));
console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("1xiaoqiang"));

// 坑2
// test()不传值相当于传了一个undefined进去
// 然后test()就把这个undefined当成是"undefined"来判断
console.log("============================================");
console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("undefined"));
console.log(/^[0-9a-zA-Z][a-zA-Z0-9_]{5,11}$/.test());
console.log(/^[0-9][a-zA-Z0-9_]{5,11}$/.test(undefined));
console.log(/^[0-9][a-zA-Z0-9_]{5,11}$/.test("undefined"));

// JS正则的两种模式
// 1. g 表示全局
// 2. i 忽略大小写
var ss = "Alexdashabi";
var s3 = ss.replace(/a/gi, "哈哈哈");  // 不是改变默认的字符串,而是生成了一个新的字符串
console.log(s3);

// 坑3
// 当正则表达式使用了全局模式(g)的时候,并且你还让它去检测一个字符串,此时会引出来一个lastIndex
// lastIndex会记住上一次匹配成功的位置,并把下一次要开始椒盐的位置记住
//
console.log("===============================");
var r = /alex/g;
console.log(r.test("alex"));  // true
console.log(r.lastIndex);  // 4
console.log(r.test("alex"));  // false
console.log(r.lastIndex);
console.log(r.test("alex"));  // true
console.log(r.lastIndex);
console.log(r.test("alex"));  // false

自定义对象:

var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);

遍历对象中的内容:
var a = {"name": "Alex", "age": 18};
for (var i in a){
  console.log(i, a[i]);
}

创建对象:

var person=new Object();  // 创建一个person对象
person.name="Alex";  // person对象的name属性
person.age=18;  // person对象的age属性

注意:

ES6中提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。

也就是说,Object结构提供了“字符串--值”的对应,Map结构提供了“值--值”的对应,是一种更完善的Hash结构实现。

var m = new Map();
var o = {p: "Hello World"}

m.set(o, "content"}
m.get(o)  // "content"

m.has(o)  // true
m.delete(o)  // true
m.has(o) // false

map

扩展:

// 父类构造函数
var Car = function (loc) {
  this.loc = loc;
};

// 父类方法
Car.prototype.move = function () {
  this.loc ++;
};

// 子类构造函数
var Van = function (loc) {
  Car.call(this, loc);
};

// 继承父类的方法
Van.prototype = Object.create(Car.prototype);
// 修复 constructor
Van.prototype.constructor = Van;
// 扩展方法
Van.prototype.grab = function () {
  /* ... */
};

JavaScript面向对象之继承

Date对象:

创建date对像:
//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显示

Date对象的方法:
var d = new Date(); 
//getDate()                 获取日
//getDay ()                 获取星期
//getMonth ()               获取月(0-11)
//getFullYear ()            获取完整年份
//getYear ()                获取年
//getHours ()               获取小时
//getMinutes ()             获取分钟
//getSeconds ()             获取秒
//getMilliseconds ()        获取毫秒
//getTime ()                返回累计毫秒数(从1970/1/1午夜)

JSON对象:

var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1); 
// 对象转换成JSON字符串
var str = JSON.stringify(obj1);

RegExp对象:

//RegExp对象

//创建正则对象方式1
// 参数1 正则表达式(不能有空格)
// 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写)

// 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。

// 创建RegExp对象方式(逗号后面不要加空格)
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");

// 匹配响应的字符串
var s1 = "bc123";

//RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1);  // true

// 创建方式2
// /填写正则表达式/匹配模式(逗号后面不要加空格)
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;

reg2.test(s1);  // true


// String对象与正则结合的4个方法
var s2 = "hello world";

s2.match(/o/g);         // ["o", "o"]             查找字符串中 符合正则 的内容
s2.search(/h/g);        // 0                      查找字符串中符合正则表达式的内容位置
s2.split(/o/g);         // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割
s2.replace(/o/g, "s");  // "hells wsrld"          对字符串按照正则进行替换

// 关于匹配模式:g和i的简单示例
var s1 = "name:Alex age:18";

s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写


// 注意事项1:
// 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
// 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
// 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
// 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
// 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。

var reg3 = /foo/g;
// 此时 regex.lastIndex=0
reg3.test('foo'); // 返回true
// 此时 regex.lastIndex=3
reg3.test('xxxfoo'); // 还是返回true
// 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号。

// 注意事项2(说出来你可能不信系列):
// 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
var reg4 = /^undefined$/;
reg4.test(); // 返回true
reg4.test(undefined); // 返回true
reg4.test("undefined"); // 返回true

RegExp(正则)
1. 两种定义方式:
  1. new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
  2. /new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")/
2. 匹配模式
  1. g 全局
  2. i 忽略大小写
3. 坑
  1. 正则表达式中间不能加空格
  2. .test() --> .test(undefined) --> .test("undefined")
  3. 全局模式下会有一个lastIndex属性

Math对象:

abs(x)      返回数的绝对值。
exp(x)      返回 e 的指数。
floor(x)    对数进行下舍入。
log(x)      返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)      返回数的正弦。
sqrt(x)     返回数的平方根。
tan(x)      返回角的正切。

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #id1{
            width:200px;
            height:50px;
        }
    </style>

</head>
<body>

<input type="text" id="id1" οnclick="begin()">
<button οnclick="end()">停止</button>

<script>

    function showTime() {
             var current_time=new Date().toLocaleString();
             var ele=document.getElementById("id1")
             ele.value=current_time
    }
    
    var clock1;
    function begin() {
        if(clock1==undefined){
            showTime();
           clock1=setInterval(showTime,1000)
        }
    }

    function end() {
        clearInterval(clock1);
        clock1=undefined
    }
</script>
</body>
</html>

setInterval clearInterval 时间框
#打印hello
        window.alert("hello")

        #用户选择true或false
        obj = window.confirm("hello word")
        console.log(obj)

        #接收用户文本内容
        obj = window.prompt("please input content")
        console.log(obj)

        #open() 打开和一个新的窗口 并 进入指定网址
        #参数1 什么都不填 就是打开一个新窗口.
        #参数2.填入新窗口的名字(一般可以不填).
        #参数3: 新打开窗口的参数.
        open('http://www.baidu.com','','width=200,resizable=no,height=100');
 

windows 方法例子

alert confirm prompt open 例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


<script>
    function f() {
        console.log("hello...")
    }

    setTimeout(f,1000)

</script>
</body>
</html>

setTimeout 点赞功能可能用到,执行一次退出
setTimeout 点赞功能可能用到,执行一次退出

Location 对象包含有关当前 URL 的信息:

location.reload()           #刷新页面

location.assign(URL)         #跳转页面,相当于链接,可以回退
location.replace(newURL)     #跳转页面,覆盖当前页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<button οnclick="f()">click</button>

<script>

    function f() {
        location.reload()
    }

</script>
</body>
</html>

刷新页面
刷新页面
 DOM 节点 :
#根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点(NODE):
  #整个文档是一个文档节点(document对象)
  #每个 HTML 元素是元素节点(element 对象)
   #HTML 元素内的文本是文本节点(text对象)
   #每个 HTML 属性是属性节点(attribute对象)
   #注释是注释节点(comment对象)
   #画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。 

节点(自身)属性: 

attributes    #节点(元素)的属性节点
nodeType    #节点类型
nodeValue     #节点值
nodeName      #节点名称
innerHTML     #节点(元素)的文本值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<a href="http://www.baidu.com">zc<span>666</span>></a>
<input id="txt" type="text" />
<select id="sel">
    <option value="1">上海</option>
    <option value="2">北京</option>
</select>
<script>
    var obj = document.getElementsByTagName("a")[0];
        alert(obj.innerText);#值的操作
        alert(obj.innerHTML);#值的操作

        var val = document.getElementById('txt').value;#标签中的值
        console.log(val);
        obj.innerText = "123";
        obj,innerHTML= "<p>123</p>";
</script>
</body>
</html>
值的操作

 

导航属性:

parentElement              #父节点标签元素
children                   #所有子标签
firstElementChild          #第一个子标签元素
lastElementChild           #最后一个子标签元素
nextElementtSibling        #下一个兄弟标签元素
previousElementSibling     #上一个兄弟标签元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="div1">
        <p class="p1">hello p</p>
        <div class="div1">hello div</div>
    </div>

    <script>
        var ele = document.getElementsByClassName("p1")[0];
        console.log(ele);
        console.log(ele.nodeName);
        console.log(ele.nodeType);
        console.log(ele.nodeValue);
        console.log(ele.innerText)
    </script>
</body>
</html>

节点(自身)属性 演示
节点(自身)属性 演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="div1">
        <p class="p1">hello p</p>
        <div class="div2">hello div</div>
    </div>

    <script>
        var ele = document.getElementsByClassName("p1")[0];
        var ele2 = ele.parentNode;              #父亲标签
        console.log(ele2.nodeName);
        var ele3 = ele.nextElementSibling;      #兄弟标签
        console.log(ele3.nodeName);
        console.log(ele3.innerHTML)
    </script>
</body>
</html>

导航属性 演示
导航属性 演示
节点查找:

直接查找

document.getElementById(“idname”)
document.getElementsByTagName(“tagname”)
document.getElementsByName(“name”)
document.getElementsByClassName(“name”)

局部查找 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="div1">

    <div class="div2">i am div2</div>
    <div name="yuan">i am div2</div>
    <div id="div3">i am div2</div>
    <p>hello p</p>
</div>

<script>

   var div1=document.getElementById("div1");

   var ele= div1.getElementsByTagName("p");
   alert(ele.length);

   var ele2=div1.getElementsByClassName("div2");
   alert(ele2.length);
    </script>
</body>
</html>

局部查找只支持两种
局部查找只支持两种
onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。
 
onfocus        元素获得焦点。               练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
 
onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。
 
onload         一张页面或一幅图像完成加载。
 
onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。
onmouseleave   鼠标从元素离开
 
onselect       文本被选中。
onsubmit       确认按钮被点击。
DOM Event(事件)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<div οnclick="alert('单击事件')">单击事件</div>
<div οndblclick="alert('双击事件')">双击事件</div>


<input type="text" value="请输入姓名" οnfοcus="enter(this)" οnblur="exit(this)">


<script>
    function enter(self){
       self.value="";
    }

    function exit(self){
        if(self.value.trim()==""){
             self.value="请输入姓名";
        }
    }

</script>

</body>
</html>

onfocus onblur 表单输入例子
onfocus onblur 表单输入例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script>
        window.onload=function () {
            var ele=document.getElementsByClassName("div1")[0];
            console.log(ele.innerText)
        }
    </script>
</head>
<body>

<div class="div1">hello div</div>


</body>
</html>

onload js代码最后执行演示
onload js代码最后执行演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<select name="" class="select_pro">
    <option value="1">河南省</option>
    <option value="2">湖南省</option>
    <option value="3">云南省</option>
</select>


<select name=""  class="select_city">

</select>


<script>
    var info={"河南省":["郑州","洛阳","开封"],"湖南省":["湘潭","长沙","岳阳"],"云南省":["大理","昆明"]}

    var ele=document.getElementsByClassName("select_pro")[0];
    var ele_2=document.getElementsByClassName("select_city")[0];
    ele.onchange=function(){
         var arrs=ele.children;


        var sindex=this.selectedIndex;          // 得到一个数字

        var province=arrs[sindex].innerText;    //  得到省份
        var citys_arr=info[province];
        console.log(citys_arr);

        var ele2_children=ele_2.children;


//        for (var j=0;j<ele2_children.length;j++){
//            ele_2.removeChild(ele2_children[0])
//        }

        ele_2.options.length=0;     //  清空select的子元素

        for (var i=0;i<citys_arr.length;i++){

                var option=document.createElement("option");

                option.innerText=citys_arr[i];
                ele_2.appendChild(option);
        }
    }


</script>
</body>
</html>

onchange 二级联动省份演示
onchange 二级联动省份演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .outer{
            margin: 0 auto;
            background-color: darkgray;
            width: 80%;
            height: 600px;
            margin-top: 30px;
            word-spacing: -5px;

        }

        #left {
            display: inline-block;
            width: 100px;
            height: 140px;
            background-color: wheat;
            text-align: center;
        }

        #choice{
            display: inline-block;
            height: 140px;
            background-color: darkolivegreen;

            vertical-align: top;
            padding:0 5px;
        }

        #choice button{
            margin-top: 20px;
        }

         #right{
            display: inline-block;
            width: 100px ;
            height: 140px;
            background-color: wheat;
            text-align: center;
            line-height: 140px;

        }

    </style>
</head>
<body>



<div class="outer">

    <select multiple="multiple" size="5" id="left">
        <option>红楼梦</option>
        <option>西游记</option>
        <option>水浒传</option>
        <option>JinPingMei</option>
        <option>三国演义</option>
    </select>




    <span id="choice">
        <button id="choose_move"> > </button><br>
        <button id="all_move"> >> </button>
    </span>



    <select multiple="multiple" size="10" id="right">
        <option>放风筝的人</option>
    </select>


</div>




<script>

    var choose_move=document.getElementById("choose_move");
    var all_move=document.getElementById("all_move");

    var right=document.getElementById("right");
    var left=document.getElementById("left");
    var options=left.options;



    choose_move.onclick=function(){

        for (var i=0; i<options.length;i++){

             var option=options[i];
             if(option.selected==true){

                   // var news=option.cloneNode(true);
                   // console.log(news);

                   right.appendChild(option);
                   i--;
             }
         }
    };

    all_move.onclick=function(){

        for (var i=0; i<options.length;i++){

             var option=options[i];

                   right.appendChild(option);
                   i--;

         };
    };




    /*
   var buttons=document.getElementsByTagName("button");
   for(var i=0;i<buttons.length;i++) {
        buttons[i].onclick = function () {

            for (var i = 0; i < options.length; i++) {

                var option = options[i];

                if (this.innerText == ">") {
                    if (option.selected == true) {

                        // var news=option.cloneNode(true);
                        // console.log(news);

                        right.appendChild(option);
                        i--;
                    }
                } else {
                    right.appendChild(option);
                    i--;
                }
            }
        };
    }


   */


</script>


</body>
</html>

select移动
select移动
绑定事件方式:

方式一: 标签内绑定

<div id="div" οnclick="foo(this)">点我呀</div>

<script>
    function foo(self){           // 形参不能是this;
        console.log("点你大爷!");
        console.log(self);   
    }
</script>

方式二: 标签对象.事件=function(){}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

    <p>PPP</p>
    <p>PPP</p>
    <p>PPP</p>


    <script>

    //绑定方式二 标签对象.事件=function(){};


    var eles =document.getElementsByTagName("p");
       for (var i=0;i<eles.length;i++){
           eles[i].onclick=function(){
               alert(789);
           }
       }

    </script>

</body>
</html>
事件介绍

事件传播

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>

    <style>
        .outer{
            width: 200px;
            height: 200px;
            background-color: red;

        }

         .inner{
            width: 100px;
            height: 100px;
            background-color: yellow;

        }
    </style>
</head>
<body>

<div class="outer">
    <div class="inner"></div>
</div>


<script>
    var ele=document.getElementsByClassName("outer")[0];
    ele.onclick=function(){
        alert(123);
    };

     var ele2=document.getElementsByClassName("inner")[0];
     ele2.onclick=function(e){
        alert(456);


        e.stopPropagation();
    }
</script>
</body>
</html>

stopPropagation 阻止外层的事件传向内层
stopPropagation 阻止外层的事件传向内层
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<input type="text" id="d1">

<script>
    var ele=document.getElementById("d1");
    ele.onkeydown=function (e) {
        var num=e.keyCode;
        var alph=String.fromCharCode(num);
        alert(e.keyCode+"-----"+alph)
    }
</script>

</body>
</html>

onkeydown 演示
onkeydown 演示

onmouseout与onmouseleave事件的区别: 

#1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
 
#2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #container{
            width:300px;
            background-color: purple;
            text-align: center;
        }
        #title{
            line-height: 50px;
        }
        #list{
            display: none;
        }
        #list div{
            line-height: 50px;
        }
        #list .item1{
            background-color: green;
        }
        #list .item2{
            background-color: yellow;
        }
        #list .item3{
            background-color: blue;
        }
    </style>

</head>
<body>

<div id="container">
    <div id="title">mouseout演示</div>
    <div id="list">
        <div class="item1">111</div>
        <div class="item2">222</div>
        <div class="item3">333</div>
    </div>
</div>

<script>

    var container=document.getElementById("container");
    var list=document.getElementById("list");
    var title=document.getElementById("title");

    title.onmouseover=function () {
        list.style.display="block"
    }

    container.onmouseleave=function(){
        list.style.display="none";
    };

</script>

</body>
</html>
mouseout演示

onsubmit:

当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.

Event 对象:

Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.
比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就时KeyCode;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script>

        window.onload=function(){
            //阻止表单提交方式1().
            //onsubmit 命名的事件函数,可以接受返回值. 其中返回false表示拦截表单提交.其他为放行.

             var ele=document.getElementById("form");
             ele.onsubmit=function(event) {
            //    alert("验证失败 表单不会提交!");
            //    return false;

            // 阻止表单提交方式2 event.preventDefault(); ==>通知浏览器不要执行与事件关联的默认动作。
             alert("验证失败 表单不会提交!");
             event.preventDefault();

    }

        };

    </script>
</head>
<body>

<form id="form">
            <input type="text"/>
            <input type="submit" value="点我!" />
</form>

</body>
</html>

阻止事件发生 两种演示
阻止事件发生 两种演示
节点操作:

创建节点: 

createElement(标签名) :创建一个指定名称的元素。
 
例:var  tag=document.createElement(“input")
            tag.setAttribute('type','text');

添加节点:

追加一个子节点(作为最后的子节点)
somenode.appendChild(newnode)
  
把增加的节点放到某个节点的前边
somenode.insertBefore(newnode,某个节点);

删除节点:

removeChild():获得要删除的元素,通过父元素调用删除

替换节点:

somenode.replaceChild(newnode, 某个节点);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .div1,.div2,.div3,.div4{
            width: 300px;
            height: 200px;
        }
        .div1{
            background-color: green;
        }
        .div2{
            background-color: red;
        }
        .div3{
            background-color: blue;
        }
        .div4{
            background-color: lemonchiffon;
        }
    </style>
    
</head>
<body>

    <div class="div1">
        <button οnclick="add()">add</button>
        div1</div>


    <div class="div2">
        <button οnclick="del()">del</button>
        div2</div>
    <div class="div3">
        <button οnclick="change()">change</button> 
        <p>div3</p>
    </div>
    <div class="div4">div4</div>

    <script>

//        把div3  的p改变为image
        function change() {
            var img=document.createElement("img");
            img.src="meinv.png";

            var ele=document.getElementsByTagName("p")[0];
            var father=document.getElementsByClassName("div3")[0];
            father.replaceChild(img,ele)
        }
        
//        删除p元素
        function del() {
            var father=document.getElementsByClassName("div1")[0];
            var son=father.getElementsByTagName("p")[0]
            father.removeChild(son)
        }


//        增加p元素
        function add() {
            var ele=document.createElement("p");
            ele.innerHTML="hello p";

            var father=document.getElementsByClassName("div1")[0];
            father.appendChild(ele)
        }

    </script>

</body>
</html>

增 删 改 查 演示
增 删 改 查 演示

 节点属性操作:

改变 HTML 内容 

改变元素内容的最简答的方法是使用 innerHTML ,innerText。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .div1{
            width: 300px;
            height: 200px;
        }
        .div1{
            background-color: green;
        }

    </style>
    
</head>
<body>

    <div class="div1">
        <button οnclick="add()">add</button>
        div1</div>


    <script>

        function add() {
            var ele=document.createElement("p");
            ele.innerHTML="<h1>hello p</h1>";

            var father=document.getElementsByClassName("div1")[0];
            father.appendChild(ele)
        }

    </script>

</body>
</html>

改变元素内容 演示
改变元素内容 演示

 改变 CSS 样式 

<p id="p2">Hello world!</p>
 
<script>
document.getElementById("p2").style.color="blue";
</script> 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <style>
        .div1{
            width: 300px;
            height: 200px;
        }
        .div1{
            background-color: green;
        }

    </style>

</head>
<body>

    <div class="div1">
        <button οnclick="add()">add</button>
        div1</div>


    <script>

        function add() {
            var ele=document.createElement("p");
            ele.innerHTML="<h1>hello p</h1>";
            ele.style.color="red";
            ele.style.fontSize="10px";

            var father=document.getElementsByClassName("div1")[0];
            father.appendChild(ele)
        }

    </script>

</body>
</html>

改变CSS样式 演示
改变CSS样式 演示

改变 HTML 属性 

elementNode.setAttribute(name,value)
 
elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)

关于class的操作 

elementNode.className
elementNode.classList.add
elementNode.classList.remove
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="div1 div2">div1</div>

<script>
    var ele=document.getElementsByTagName("div")[0];

    console.log(ele.className);
    console.log(ele.classList[0]);
    ele.classList.add("hide");
    console.log(ele.className)
</script>

</body>
</html>

class操作 演示
class操作 演示

案例 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>


</head>
<body>

     <button οnclick="select('all');">全选</button>
     <button οnclick="select('cancel');">取消</button>
     <button οnclick="select('reverse');">反选</button>


     <table border="1" id="Table">
         <tr>
             <td><input type="checkbox"></td>
             <td>111</td>
         </tr>
         <tr>
             <td><input type="checkbox"></td>
             <td>222</td>
         </tr>
         <tr>
             <td><input type="checkbox"></td>
             <td>333</td>
         </tr>
         <tr>
             <td><input type="checkbox"></td>
             <td>444</td>
         </tr>
     </table>


<script>
    function select(choice){
        var ele=document.getElementById("Table");

        var inputs=ele.getElementsByTagName("input");
        for (var i=0;i<inputs.length;i=i+1){

                   var ele2=inputs[i];
            if (choice=="all"){
                ele2.checked=true;

            }else if(choice=="cancel"){
                ele2.checked=false;
            }
            else {

                if (ele2.checked){
                    ele2.checked=false;
                }else {
                    ele2.checked=true;
                }
            }

            }
    }
</script>


</body>
</html>

表格 全选 反选 取消 演示
表格 全选 反选 取消 演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        h1{
            background-color: darkgray;
            color: red;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>

<h1 class="title">欢迎方少伟sb</h1>
<script>
       function test(){
            var ele=document.getElementsByClassName("title")[0];
            // console.log(ele)
            //       console.log(ele.innerText);
            //       console.log(typeof ele.innerText);
            var content=ele.innerText;
            var fist_char=content.charAt(0);
            var later_string=content.substring(1,content.length);
            var new_content=later_string+fist_char;

           // 赋值操作
           ele.innerText=new_content;
       }

       setInterval(test,1000);
</script>
</body>
</html>

跑马灯例子
跑马灯例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    <!--公共样式隐藏-->
        .hide{
            display: none;
        }
    <!--遮罩层,铺满整个屏幕,上下左右都为零-->
        .c1{
           position: fixed;#绝对定位
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: #0f0f0f;
            opacity: 0.5;#设置元素的不透明级别
            z-index: 9;
        }
        <!--固定到遮罩层中间-->
        .c2{
            width: 500px;
            height: 400px;
            background-color: #f9f9f9;
            position: fixed;
            left: 50%;
            top: 50%;
            margin-top: -200px;
            margin-left: -250px;
            z-index: 10;
        }
    </style>
</head>
<body style="margin: 0;">
<div>
    <input type="button" value="添加" οnclick="ShowMod();">
</div>
<!--遮罩层开始-->
<div id='id1' class="c1 hide">

</div>
<!--遮罩层结束-->
<!--弹出框开始-->

<div id= 'id2'class="c2 hide">
    <p class="=c3"><input type="text" placeholder="username"></p>
    <p><input type="password" placeholder="password"></p>
    <p><input type="button" value="取消" οnclick="HideMod();">
        <input type="button" value="确定"></p>
</div>
<!--弹出框结束-->
<script>
    function ShowMod(){
     <!--找到标签获取所有样式,隐藏掉hide,弹窗会显现-->
        document.getElementById('id1').classList.remove('hide');
        document.getElementById('id2').classList.remove('hide');
    }
   function HideMod(){
    <!--找到标签获取所有样式,增加hide,隐藏弹窗-->
        document.getElementById('id1').classList.add('hide');
        document.getElementById('id2').classList.add('hide');
    }
</script>
</body>
</html>
模态对话框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .g{
            color: gray;
        }
        .b{
            color: black;
        }
    </style>

</head>
<body>
    <p>当鼠标进入时,移除内容</p>
    <p>当鼠标退出时,添加内容</p>
<!--默认文本方式1-->
    <input type="text" placeholder="请输入内容:" />
<!--默认文本方式2-->    
<!--onfocus得到焦点时执行,onblur光标移出时执行-->
    <input type="text" class="g" value="请输入内容:" οnfοcus="Fouce(this);" οnblur="Blur(this);" />
    <script>
        function Fouce(ths) {
            ths.className = "b";
            var current_val = ths.value;
            <!--点击清空默认文本-->
            if (current_val == "请输入内容:"){
                ths.value = "";
            }
        }
        function Blur(ths) {
            var current_val = ths.value;
            <!--去掉空格长度为0-->
            if (current_val == "请输入内容:" ||  current_val.trim().length == 0){
                ths.value = "请输入内容:";
            ths.className = "g";
            }
        }
    </script>
</body>
</html>
搜索框默认文本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <!--双击触发事件-->
        <input type="button" value="全选" οndblclick="CheckAll();"/>
        <input type="button" value="反选" οnclick="ReverseAll();" />
        <input type="button" value="取消" οndblclick="CancleAll();"/>
    </div>
    <table>
        <thead>
            <tr>
                <th>序号</th>
                <th>用户名</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody id="tb">
            <tr>
                <td><input  class="c1" type="checkbox" /></td>
                <td>zc</td>
                <td>20</td>
            </tr>
            <tr>
                <td><input  class="c1" type="checkbox" /></td>
                <td>zc</td>
                <td>20</td>
            </tr><tr>
                <td><input class="c1" type="checkbox" /></td>
                <td>zc</td>
                <td>20</td>
            </tr><tr>
                <td><input class="c1" type="checkbox" /></td>
                <td>zc</td>
                <td>20</td>
            </tr>
        </tbody>
    </table>
    <script>
        function CheckAll() {
           var tb = document.getElementById("tb");
           var checks = tb.getElementsByClassName("c1");
           for (var i=0; i<checks.length;i++){
                var current_check = checks[i];
                current_check.checked = true;
           }
        }
        function CancleAll() {
           var tb = document.getElementById("tb");
           var checks = tb.getElementsByClassName("c1");
           for (var i=0; i<checks.length;i++){
                var current_check = checks[i];
                current_check.checked = false;
           }
        }
        function ReverseAll() {
           var tb = document.getElementById("tb");
           var checks = tb.getElementsByClassName("c1");
           for (var i=0; i<checks.length;i++){
                var current_check = checks[i];
                if (current_check.checked) {
                   current_check.checked = false;
                }else{
                   current_check.checked = true;
                }
           }
        }
    </script>
</body>
</html>
表格全选反选取消
<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <ul>
        <li><input type="radio" name="g" value="11">男</li>
        <li><input type="radio" name="g" value="12">女</li>
        <li><input type="radio" name="g" value="13">中</li>
    </ul>
    <script>
        var radios = document.getElementsByTagName("input");
    </script>

</body>
</html>
单选框
<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <select id="sel">
        <option value="11">上海</option>
        <!--默认选中北京-->
        <!--selectedIndex通过索引获取值-->
        <option value="22" selected="selected">北京</option>
        <option value="33">河南</option>
        <option value="44">河北</option>
    </select>
</body>
</html>
下拉选项
<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <input type="button" οnclick="Func();" value="点我啊">
    <div id="i1">
        <div class="c1">123</div>
        <div class="c1" zc="sb">123</div>
        <div class="c1" zc="sb">123</div>
        <div class="c1">123</div>
        <div class="c1" zc="sb">123</div>
        <div class="c1">123</div>
        <div class="c1" zc="sb">123</div>
        <div class="c1">123</div>
        <div class="c1" zc="sb">123</div>
    </div>
    <script>
        function Func() {
        <!--获得i1所有标签,循环每一个,判断zc="sb"-->
            var i1 = document.getElementById("i1");
            var divs =i1.children;
            for (var i=0; i<divs.length;i++){
                var current_div = divs[i];
                var result = current_div.getAttribute("zc");
                console.log(result);
                if (result == "sb"){
                    current_div.innerText = "456";
                }
            }
        }
    </script>
</body>
</html>
属性操作,改变无规则标签值
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>tab</title>
  <style>
    *{margin:0; padding:0; list-style:none;}
    body{
        font-family: "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei", "\9ED1\4F53", Arial, sans-serif;
    }
    h3{
        text-align: center;
        color:darkcyan;
        margin-top: 30px;
        letter-spacing: 5px;
    }
    .box{
      width: 1000px;
      margin:50px auto 0px;
    }
    #title{
      line-height: 40px;
      background-color: rgb(247,247,247);
      font-size: 16px;
      font-weight: bold;
      color: rgb(102,102,102);
    }
    #title span{
      float: left;
      width: 166px;
      text-align: center;
    }
    #title span:hover{
      /*color: black;*/
      cursor: pointer;
    }
    #content{
      margin-top: 20px;
    }
    #content li{
      width: 1050px;
      display: none;
      background-color: rgb(247,247,247);
    }
    #content li div{
      width: 156px;
      margin-right: 14px;
      float: left;
      text-align: center;
    }
    #content li div a{
      font-size: 14px;
      color: black;
      line-height: 14px;
    /*  float: left;*/
    display: inline-block;
      margin-top: 10px;
    }
    #content li a:hover{
      color: #B70606;
    }
    #content li div span{
        font-size: 16px;
        line-height: 16px;
        /*float: left;*/
        display: block;
        color: rgb(102,102,102);
        margin-top: 10px;
      }
    #content img{
      float: left;
      width: 155px;
      height: 250px;
    }
    #title .select{
      background-color: #2459a2;
      color: white;
        border-radius: 10%;
    }
    #content .show{
      display: block;
    }

    .show span{
        color: red!important;
        font-size: 30px;
    }
  </style>
</head>

<body>
    <h3 id="wel">京东商城欢迎您</h3>
    <!--  direction="right up down left" -->
<!--  behavior:滚动方式(包括3个值:scroll、slide、alternate) -->
<!--  说明:scroll:循环滚动,默认效果;slide:只滚动一次就停止;alternate:来回交替进行滚动。 -->
<!--  scrollamount="5" 滚动速度 -->

<marquee behavior="scroll" direction="right">欢迎您苑昊先生</marquee>
    <script>

    function test(){

        var mywel = document.getElementById("wel");
        var content = mywel.innerText;

        var f_content = content.charAt(0);
        var l_content = content.substring(1,content.length);

        var new_content = l_content + f_content;
        mywel.innerText = new_content;

    }

    // setInterval("test();", 500);
</script>
    <div class="box">
      <p id="title">
        <span class="select">家用电器</span>
        <span>家具</span>
        <span>汽车</span>
        <span>食品</span>
        <span>女鞋</span>
        <span>医疗保健</span>
      </p>

      <ul id="content">
        <li class="show">

          <div><img src="https://img10.360buyimg.com/n1/s450x450_jfs/t4786/325/2470647304/119102/9e1a4ed5/59005841Nd786a8df.jpg" alt="冰箱"><a href="#">容声(Ronshen)冰箱</a><span>价格:5600</span></div>
          <div><img src="https://img12.360buyimg.com/n1/s450x450_jfs/t3037/347/1290968859/201366/7c1028a0/57c00194N9d0a54c6.jpg" alt="洗衣机"><a href="#">海尔洗衣机</a><span>价格:5400</span></div>
          <div><img src="https://img11.360buyimg.com/n1/jfs/t3289/128/2393835119/236360/af1d283b/57e0f300N53dde603.jpg" alt="电饭煲"><a href="#">福库(CUCKOO)电饭煲</a><span>价格:3999</span></div>
          <div><img src="https://img13.360buyimg.com/n1/jfs/t3235/137/2361713777/152258/a6908440/57e098c2N44a90a5d.jpg" alt="智能电视"><a href="#">三星智能电视</a><span>价格:8999</span></div>
          <div><img src="https://img10.360buyimg.com/n1/jfs/t2053/101/1391591157/215066/572e131b/5696ee9bN2376492d.jpg" alt="净水器"><a href="#">净水器</a><span>价格:1300</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3175/78/2357430273/262835/9a8e7f65/57e0a3e9Nbda39dd2.jpg" alt="空气净化器"><a href="#">空气净化器</a><span>价格:5300</span></div>
        </li>

        <li>

          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t1948/172/2877517581/556924/682eb107/56f63dc8Naddf77e5.jpg" alt="沙发"><a href="#">沙发</a><span>价格:2900</span></div>

        </li>
        <li>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
          <div><img src="http://img11.360buyimg.com/n1/jfs/t4969/76/45396935/144539/347153d4/58d9cff4N36872ad6.jpg" alt="长安汽车"><a href="#">长安汽车</a><span>价格:12900</span></div>
        </li>
        <li>

          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t4414/110/2582917360/207971/b7e129ad/58f0ee1fN94425de1.jpg" alt="嘉兴粽子"><a href="#">嘉兴粽子</a><span>价格:1</span></div>

        </li>
        <li>

          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>
          <div><img src="https://img14.360buyimg.com/n1/jfs/t3079/298/5759209435/92674/14818594/587f1c33N53e5d2a9.jpg" alt="星期六"><a href="#">星期六</a><span>价格:439</span></div>

        </li>
        <li>

          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>
          <div><img src="https://img12.360buyimg.com/n1/jfs/t5755/127/1139389729/356866/99d4e869/5923e410Nb2983f70.jpg" alt="汇仁 肾宝片"><a href="#">汇仁 肾宝片</a><span>价格:322</span></div>

        </li>


      </ul>
    </div>

    <script>
      var title=document.getElementById('title');
      var content=document.getElementById('content');
      var category=title.getElementsByTagName('span');
      var item=content.getElementsByTagName('li');

      for (var i = 0; i < category.length; i++) {

          category[i].index=i;

          category[i].onclick=function(){

            for (var j = 0; j < category.length; j++) {
              category[j].className='';
              item[j].className='';
            }
            this.className='select';
            item[this.index].className='show';
          }


      }

    </script>
</body>
</html>
跑马灯+tab切换
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <input type="text" />
        <input type="button" value="添加" onclick="AddElement(this);"/>
    </div>
    <div>
        <ul id="commentList">
            <li>zc</li>
        </ul>
    </div>
    <!--<script>-->
        <!--function AddElement(ths) {-->
            <!--//获取输入的值-->
            <!--var val = ths.previousElementSibling.value;-->
            <!--ths.previousElementSibling.value = "";//添加后清空-->
            <!--var commentList = document.getElementById("commentList");-->
            <!--//第一种形式通过字符串的形式添加进去的-->
            <!--&lt;!&ndash;var str = "<li>"+ val + "</li>";&ndash;&gt;-->
            <!--&lt;!&ndash;commentList.insertAdjacentHTML("beforeEnd",str);//动态内部下边添加标签&ndash;&gt;-->
            <!--&lt;!&ndash;commentList.insertAdjacentHTML("beforeBegin",str);//动态往外部上边添加标签&ndash;&gt;-->
            <!--&lt;!&ndash;commentList.insertAdjacentHTML("afterBegin",str);//动态内部上边添加标签&ndash;&gt;-->
            <!--&lt;!&ndash;commentList.insertAdjacentHTML("afterEnd",str);//动态外部下边添加标签&ndash;&gt;-->
             <!--var tag = document.createElement("li");-->
            <!--tag.innerText = val;//创建了li标签,并把内容写成了val-->
            <!--commentList.appendChild(tag);//元素形式,字符串请使用上面那种-->
        <!--}-->
    <!--</script>-->


    <script>
        function AddElement(ths) {
            //获取输入的值
            var val = ths.previousElementSibling.value;
            ths.previousElementSibling.value = "";//添加后清空
            var commentList = document.getElementById("commentList");
            //第二种方式, 元素的方式(推荐使用)
            var tag = document.createElement("li");
            tag.innerText = val;//创建了li标签,并把内容写成了val

                //插入链接
                var temp = document.createElement("a");
                temp.innerText = "百度";
                temp.href = "http://baidu.com";
                tag.appendChild(temp);

            <!--commentList.appendChild(tag);//元素形式,字符串请使用上面那种-->
            commentList.insertBefore(tag,commentList.children[0]);//插在最前面
        }
    </script>
</body>
</html>
动态添加标签(两种形式)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2 id="h1">333
        <span>123</span>
        <a>123</a>
    </h2>
    <div id="container">
        <div class="item">1</div>
        <div class="item">2</div>
    </div>
    <script>
        var h = document.getElementById("h1");
        var c = document.getElementById("container");
        c.appendChild(h);//移动到下面
    </script>   
</body>
</html>
标签移动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #father{
            width: 400px;
            height: 5000px;
            border:1px solid #000;
        }
        #son{
            width: 600px;
            height: 5000px;
            background: linear-gradient(45deg ,red,yellow,green,cyan,blue);
        }
    </style>
</head>
<body>
<div id="top">我是可爱的顶部</div>
    <div id="father">
        <div id="son"></div>
    </div>
<a href="#top">返回顶部</a>
</body>
</html>
返回顶部锚点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .go-top{
            position: fixed;
            right:28px;
            bottom:18px;
            backgroup-color:#2459a2;
            color:white;
            width:40px;
            height:40px;
        }
        .hide{
            display:none;
        }
    </style>
</head>
<body onscroll="Func();">
//局部网页滚动条,返回顶部
<div id="=xo" style="height:200px;overflow:auto" onscroll="Func();">
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
</div>




    <div id="i1" style="height:2000px">
    <h1>nihao</h1>
    </div>
    <div id="i2" class="go-top hide">
        <!--&lt;!&ndash;<a href="#i1">返回顶部</a>&ndash;&gt;锚点-->
        <a href="#" onclick="GoTOP();">返回顶部</a>
        //#号是什么都不处理
    </div>
    <script>
        function Func() {
            //获取当前滚动高度
            var scrollTop = document.body.scrollTop;
            var ii  = document.getElementById("i2");
            if(scrollTop>10) {
                ii.classList.remove("hide");
            }else{
                ii.classList.add("hide");
            }
        }

        function GoTOP() {
            document.body.scrollTop = 0;
            //scrollTop滚动高度
        }
    </script>
</body>
</html>
全网页&局部网页返回顶部
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="margin:0;">
<div id="xo" style="height:200px;overflow:auto; width:400px;margin:0 auto;border:1px solid red;">
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
    <div>123</div>
</div>
<script>
    var i = document.getElementById('xo');
    //scrollHeight文档的高度:自身+padding
    //scrollTop:滚动条距离顶部高度
    //clientHeight:可见范围的高度:自身+padding
    //clientTop:边框高度
    //offsetTop:当前标签距离顶部(body)定位标签的高度
    //offsetHeight:可见范围的高度:自身+padding+border
    console.log(i.scrollHeight);
    console.log(i.clientHeight);
    console.log(i.clientTop);
    console.log(i.offsetTop);
    console.log(i.offsetHeight);
</script>
</body>
</html>
高度相关
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin:0;
            background-color:#dddd;
        }
        .w{
            margin:0 auto;
            width:980px;
        }
        .pg-header{
            background-color:black;
            color:white;
            height:48px;
        }
        .pg-body .menu{
            position:absolute;
            width:180px;
            background-color:white;
            float:left;
            left:200px
        }
        .pg-body .menu .active{
            background-color:#425a66;
            color:
        }
        .pg-body .fixed{
            position:fixed;
            top:50px;
        }
        .pg-body .content{
            position:absolute;
            width:800px;
            background-color:white;
            float:left;
            left:385px;
            right:200px;
        }
        .pg-body .content .item{
            height: 900px;
        }
    </style>
</head>
<body onscroll="Hua();">
<div class="pg-header">
     <div class="w">

     </div>
</div>
<div class="pg-body">
    <div class="fixed">
        <div id="menu" class="menu" >
            <ul>
                <li>第一章</li>
                <li>第二章</li>
                <li>第三章</li>
                <li>第四章</li>
            </ul>
        </div>
        </div>
        <div id="content" class="content">
            <div class="item">床前明月光1</div>
            <div class="item">床前明月光2</div>
            <div class="item">床前明月光3</div>
            <div class="item">床前明月光4</div>
        </div>
</div>
<script>
    function Hua(){
        var huaGao = document.body.scrollTop;
        var caiDan =document.getElementById("menu");
        if (huaGao>48){
             caiDan.classList.add("fixed");
        }else{
            caiDan.classList.remove("fixed");
        }
        var items =document.getElementById("content").children;
        for (var i=0;i<items.length;i++){
            var currentItem = items[i];
               currentItem.offsetTop
        }

    }
</script>

</body>
</html>
滚动菜单(功能不全)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form id="fom" action="http://www.baidu.com" method="get">
        <input name="query" type="text" />
        <input type="button" onclick="SubmitForm();" value="提交" />
    </form>
    <input type="button" value="confirm" onclick="Firm();" />
    <input type="button" value="Interval" onclick="Interval();" />
    <input type="button" value="StopInterval" onclick="StopInterval();" />
    <div>
        <input type="button" value="删除" onclick="Delete();" />
        <input type="button" value="保留状态" onclick="UnDelete();" />
        <div id="status"></div>
    </div>
    <script>
        function UnDelete(){
            clearTimeout(t1);
        }
        function Delete(){
            document.getElementById("status").innerText = "已删除";
            t1 = setTimeout(ClearStatus,5000);
        }
        function ClearStatus(){
            document.getElementById("status").innerText = "";
        }
        function SubmitForm(){
            document.getElementById("fom").innerText = "";
        }
        function Firm(){
            var r = confirm("你好");
            console.log(r);
        }
        function f1(){
            console.log(123);
        }
        function Interval(){
            <!--setInterval("console.log(1)",1000);-->
            <!--setInterval(f1,1000);-->
            s1 = setInterval(function(){
                console.log(123);
            },1000);
            s2 = setInterval(function(){
                console.log(13);
            },2000);
             console.log(1);
        }
        function StopInterval() {
            clearTimeout(s1);
        }
    </script>
</body>
</html>
定时器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    function func(){
        for (var i=0;i<3;i++){
            setInterval(function(){
                console.log(i);
        },1000);
    }
    }
    func();
</script>

</body>
</html>
//作用域:每一秒输出3(跨度是3)
作用域:每一秒输出3(跨度是3)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="btns">
    <input type="button" value="点我1" />
    <input type="button" value="点我2" />
    <input type="button" value="点我3" />
</div>
<script>
    var btns = document.getElementById('btns').children;
    for (var j = 0;j<btns.length;j++){
        var current_input = btns[j];
        current_input.onclick = function(){
            alert(j);
        }
    }
</script>

</body>
</html>
//作用域:点我1,点我2,点我3都输出为3,
current_input.onclick = function(){
            alert(j);
这个函数外面,没有其他函数只剩下全局变量,全局变量执行结果等于3所以输出都为3
作用域
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<!--注册事件:-->
<!--a.<div οnclick="xxxxx"></div>-->
<!--b.document......onclick = function()-->
<!--this:触发当前事件标签-->
<!--event:触发当前标签的事件的内容-->
<body>
<div οnmοuseοver="Func(this);" οnmοuseοut="Out(this);">123</div>
<input type="text" οnkeydοwn="Down(this,event);" />//event当前事件包含的内容
<script>
    function Down(ths,evn){
        console.log(e);
    }

    function Func(ths){
        ths.style.color = "red";//鼠标放上改变颜色
    }
    function Out(ths){
        ths.style.color = "black";//去掉鼠标颜色恢复
    }
</script>
</body>
</html>



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
//自定义事件:οnclick="Func();
//默认事件:href="http://www.baidu.com"
//自定义事件>默认事件
//可以更改自定义事件真假来判断它是否执行
<body>
    <a href="http://www.baidu.com" οnclick="Func();">baidu</a>
    <a href="http://www.baidu.com" οnclick="return Func();">baidu</a>
    <form action="s10.html">
        <div id="fo">
        <input type="text" />
        </div>
        <input type="submit" value="提交" οnclick="SubmitForm();" />
    </form>
    <script>
        function Func(){
            alert(123);
        }
        function Func(){
            alert(123);
            return true;
        }
        function SubmitForm(){
            var inputs = document.getElementById('fo').getElementsByTagName('input');
            for(var i = 0;i<inputs.length;i++){
                var currentInput = inputs[i];
                var val = currentInput.value;
                if(val.trim().length == 0){
                    alert('请输入内容');
                    return false;
                }
            }
            return true;
        }
    </script>
</body>
</html>
Dom事件绑定

 

js的作用域:

作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种

 全局作用域:

var name="yuan";

    function foo(){
        var age=23;
        function inner(){
            console.log(age);
        }

        inner();
    }

    console.log(name);    // yuan
    //console.log(age);   // Uncaught ReferenceError: age is not defined
    foo();                // 23
    inner();              // Uncaught ReferenceError: inner is not defined
最外层函数和在最外层函数外面定义的变量拥有全局作用域
var name="yuan";

    function foo(){
        age=23;

        var sex="male"
    }
    foo();
    console.log(age);   //  23
    console.log(sex);   // sex is not defined
所有末定义直接赋值的变量自动声明为拥有全局作用域,例如:

变量blog拥有全局作用域,而sex在函数外部无法访问到。

(3)所有window对象的属性拥有全局作用域

一般情况下,window对象的内置属性都都拥有全局作用域,例如window.alert()、window.location、window.top等等。

局部作用域:

和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域成为函数作用域.

作用域链:

在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

//-----**********************例1*********************************

var s=12;
    function f(){
        console.log(s);
         var s=12;          // if s=12
        console.log(s)
    }
    f();

//-----**********************例2*********************************

var s=10;
function foo(){
  console.log(s);
  var s=5;
  console.log(s);
  function s(){console.log("ok")}// 函数的定于或声明是在词法分析时完成的,执行时已不再有任何操作

  console.log(s);
}

foo();

//-----***********************例3********************************

function bar(age) {

        console.log(age);
        var age = 99;
        var sex= 'male';
        console.log(age);
        function age() {
            alert(123)
        };
        console.log(age);
        return 100;
}

result=bar(5);

//-----********************************************************


function bar(age) {

        console.log(age);
        var age = 99;
        var sex="male";
        console.log(age);
        function age(){
            alert(123);
        } ;
        console.log(age);
        return 100;
}

result=bar(5);

一 词法分析过程(涉及参数,局部变量声明,函数声明表达式):
    1-1 、分析参数,有一个参数,形成一个 AO.age=undefine;
    1-2 、接收参数 AO.age=5;
    1-3 、分析变量声明,有一个 var age, 发现 AO 上面有一个 AO.age ,则不做任何处理
    1-4 、分析变量声明,有一个 var sex,形成一个 AO.sex=undefine;
    1-5 、分析函数声明,有一个 function age(){} 声明, 则把原有的 age 覆盖成 AO.age=function(){};
二 执行过程:
    2-1 、执行第一个 console.log(age) 时,当前的 AO.age 是一个函数,所以输出的一个函数
    2-2 、这句 var age=99; 是对不 AO.age 的属性赋值, AO.age=99 ,所以在第二个输出的age是 99;
    2-3 、同理第三个输出的是 99, 因为中间没有改变 age 值的语句了。

          注意:执行阶段:
                        function age(){
                            alert(123)
                        } ;

            不进行任何操作,将执行语句复制给age这部操作是在词法分析时,即运行前完成的。
过程解析

 

 

转载于:https://www.cnblogs.com/zcok168/p/9490478.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值