JavaScript 学习

JavaScript简介

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

JavaScript的组成部分

ECMAScript,描述了该语言的语法和基本对象(核心)。

文档对象模型(DOM),描述处理网页内容的方法和接口(整合js,html,css)。

浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。(整合js和浏览器)

简单来说DOM处理的是标签,BOM处理的是浏览器,而ECMAScript描述的为:

  • 语法 
  • 类型 
  • 语句 
  • 关键字 
  • 保留字 
  • 运算符 
  • 对象 (封装 继承 多态) 基于对象的语言.使用对象.
javascript组成
 
 

1 JavaScript基础

1.1引入方式

1 直接编写(可写在head或body中)
    <script>
        alert('hello wate')
    </script>
2 导入文件
    <script src="hello.js"></script>

1.2JavaScript的变量、常量、标识符

JavaScript的使用变量需要先使用var关键字声明

1 var a;//注意每行需要使用分号结尾
2 a =1;

也可以

1 var  a=1;

 也可以一行声明多个变量

1 var name=wate,age=15,sex=man

注:声明变量时不使用var的时候,变量为全局变量。

 变量命名,首字符只能是字母,下划线,$美元符 三选一,余下的字符可以是下划线、美元符号或任何字母或数字字符且区分大小写,x与X是两个变量
 

1.3常量

常量 :直接在程序中出现的数据值

  1. 由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
  2. 常用于表示函数、变量等的名称
  3. 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
  4. JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符

JavaScript数据类型

        number     -----  数值
        (js中所有的数值都是number型,能表示的最大值是±1.7976931348623157 x 10308,能表示的最小值是±5 x 10 -324)
boolean ----- 布尔值 ()
        Boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0
        布尔值也可以看作on/off、yes/no、1/0对应true/false
        Boolean值主要用于JavaScript的控制语句,例如: string
----- 字符串
        是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起;JavaScript中没有字符类型;常用特殊字符在字符串中的表达;
        字符串中部分特殊字符必须加上右划线\;常用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线 undefined
----- undefined
        当声明的变量未初始化时,该变量的默认值是 undefined。

         当函数无明确返回值时,返回的也是值 "undefined";

    null----- null 

        另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

        尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍        过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

1.4运算符

算术运算符:
    +   -    *    /     %       ++        -- 

比较运算符:
    >   >=   <    <=    !=    ==    ===   !==

逻辑运算符:
     &&   ||   !

赋值运算符:
    =  +=   -=  *=   /=

字符串运算符:
    +  连接,两边操作数有一个或两个是字符串就做连接运算
自加:
++ :x++ = x=x+1 注(i++:先赋值后计算,++i:先计算后赋值)
自减:
  -- :x-- = x=x-1

js是一门弱类型语言

1 var x  ="1",y=1
2 console.log(x == y)
3 //true
4 //需要使用全等于
5 var x  ="1",y=1
6 console.log(x === y)
7 //false
静态类型语言
一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。 
动态类型语言
一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。 
强类型语言
一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串去应用。 
弱类型语言
一种类型可以被忽略的语言,与强类型相反。JS 是弱类型的。在JS中,可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。 
所以说 Python 既是动态类型语言 (因为它不使用显示数据类型声明),又是强类型语言 (因为只要一个变量获得了一个数据类型,它实际上就一直是这个类型了)。
 1  注意3: NaN
 2    var d="yuan";
 3     d=+d;
 4     alert(d);//NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
 5     alert(typeof(d));//Number
 6 
 7     //NaN特点:
 8     
 9     var n=NaN;
10     
11     alert(n>3);
12     alert(n<3);
13     alert(n==3);
14     alert(n==NaN);
15     
16     alert(n!=NaN);//NaN参与的所有的运算都是false,除了!=

1.4.1比较运算符

>   >=   <    <=    !=    ==    ===   !==

用于控制语句时:

        if (2>1){       //  3  0  false null undefined []
            console.log("条件成立!")
        }

1.4.2逻辑运算符

if (2>1 && [1,2]){
    console.log("条件与")
}

// 思考返回内容?
console.log(1 && 3);
console.log(0 && 3);
console.log(0 || 3);
console.log(2 || 3);

2 流程控制

流程控制分为:

1、顺序结构

2、分支结构

3、循环结构

 

顺序结构就是语句体从上往下顺序执行。

    <script>
        console.log(“星期一”);
        console.log(“星期二”);
        console.log(“星期三”);
    </script>

分支结构

if-else语法

if (表达式){
     语句1;
     ......
   } else if(表达式2){
     语句2;
    。。。。
  }else{
    语句3   ..... }//如果表达式为true则语句执行1,如果表达式为false则判断表达式2,表达式2为true执行2否则执行3。

 练习if分支

<html>
<body>
    <script>
        var num = 78;
        if (num>90){
              alert("优秀");
        else if (num >80){
              alert("良");
        else{
              alert("还行") ;
}
    </script>
</body>
</html> 

switch-case结构

switch基本格式
switch(表达式){
    case 值1:语句1;break;
    case 值2:语句2;break;
    default:语句4;
}
//必须添加break,不然会一直向下执行知道遇到break。

 switch练习

// switch

        var week=12;
        switch (week){
            case 1:alert("星期1");break;
            case 2:alert("星期2");break;
            case 3:alert("星期3");break;
            case 4:alert("星期4");break;
            case 5:alert("星期5");break;
            case 6:alert("星期6");break;
            case 7:alert("星期7");break;
            default:alert("无效输入");
        }

 while循环结构

while(表达式){
   语句体
   【if(表达式){
        break;
    }】
}
var count=0;
while(count<10){
    console.log("ok");
    count++; 
}

for条件循环

三要素: 初始变量  条件  自增减

for (var i=0;i<10;i++{
    语句体执行10次
}

循环数组

var arr=[11,222,333];
for (var i in arr){//i为索引
    console.log(arr[i])
}

 

对象

简介:

在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的。

字符串对象

var s="hello world";
console.log(s.length);//字符串长度属性
console.log(s.toUpperCase());//转换大写
console.log(s.toLowerCase());//转换小写
x.trim() ----去除字符串两边空格  

console.log(s.charAt(3));//通过索引找符号l console.log(s.indexOf(3));//通过符号找索引
x.match(regexp)         ----match返回匹配字符串的数组,如果没有匹配则返回null
x.search(regexp)        ----search返回匹配字符串的首字符位置索引
console.log(s.substr(2,2)); // 按长度截断 从下标为2的位置截取两个字符
console.log(s.substring(2,4)); // 按位置截断 从下标为2的位置截取到下标为3的
console.log(s.replace(
"world","egon"));//替换
console.log(s.split(
" ")) ; // 分割字符串["hello", "world"]
x.concat(addstr) --拼接字符串

</script>

 数组对象

 

创建方式1:
var arrname = [元素0,元素1,….];          // var arr=[1,2,3];

创建方式2:
var arrname = new Array(元素0,元素1,….); // var test=new Array(100,"a",true);

创建方式3:
var arrname = new Array(长度); 
            //  初始化数组对象:
                var cnweek=new Array(7);
                    cnweek[0]="星期日";
                    cnweek[1]="星期一";
                    ...
                    cnweek[6]="星期六";
创建二维数组
var cnweek=new Array(7);
for (var i=0;i<=6;i++){
    cnweek[i]=new Array(2);
}
cnweek[0][0]="星期日";
cnweek[0][1]="Sunday";
cnweek[1][0]="星期一";
cnweek[1][1]="Monday";
...
cnweek[6][0]="星期六";
cnweek[6][1]="Saturday";

数组对象的方法

join方法:

x.join(bystr) //将数组元素拼接成字符串
var arr=[1,2,3,4,5]
var str1= arr.join("-")
alert(str1);//结果为"1-2-3-4-5-6-7"
View Code

concat方法:

x.concat(value,....)//给数组添加元素

var a=[1,2,3];
var b=a.concat(4,5);
alert(a.toString());//结果为1,2,3
alert(b.toString());//返回结果为1,2,3,4,5
View Code

数组排序-reverse sort:

//x.reverse()
//x.sort()

var arr1=[32, 12, 111, 444];
//var arr1=["a","d","f","c"];

arr1.reverse(); //颠倒数组元素
alert(arr1.toString());
//结果为444,111,12,32

arr1.sort();    //排序数组元素
alert(arr1.toString());
//结果为111,12,32,444

//------------------------------
arr=[1,5,2,100];

//arr.sort();
//alert(arr);
//如果就想按着数字比较呢?

function intSort(a,b){
    if (a>b){
        return 1;//-1
    }
    else if(a<b){
        return -1;//1
    }
    else {
        return 0
    }
}

arr.sort(intSort);

alert(arr);

function IntSort(a,b){
    return a-b;
}
View Code

数组切片

//x.slice(start, end)
//
//使用注解
//
//x代表数组对象
//start表示开始位置索引
//end是结束位置下一数组元素索引编号
//第一个数组元素索引为0
//start、end可为负数,-1代表最后一个数组元素
//end省略则相当于从start位置截取以后所有数组元素

var arr1=['a','b','c','d','e','f','g','h'];
var arr2=arr1.slice(2,4);
var arr3=arr1.slice(4);
var arr4=arr1.slice(2,-1);

alert(arr2.toString());
//结果为"c,d" 
alert(arr3.toString());
//结果为"e,f,g,h"
alert(arr4.toString());
//结果为"c,d,e,f,g"
View Code

删除子数组

//x. splice(start, deleteCount, value, ...)

//使用注解

//x代表数组对象
//splice的主要用途是对数组指定位置进行删除和插入
//start表示开始位置索引
//deleteCount删除数组元素的个数
//value表示在删除位置插入的数组元素
//value参数可以省略       
        
var a = [1,2,3,4,5,6,7,8];
a.splice(1,2);

alert(a.toString());//a变为 [1,4,5,6,7,8]

a.splice(1,1);

alert(a.toString());//a变为[1,5,6,7,8]

a.splice(1,0,2,3);

alert(a.toString());//a变为[1,2,3,5,6,7,8]
View Code

数组的push和pop:

//push pop这两个方法模拟的是一个栈操作

//x.push(value, ...)  压栈
//x.pop()             弹栈      
//使用注解
//
//x代表数组对象
//value可以为字符串、数字、数组等任何值
//push是将value值添加到数组x的结尾
//pop是将数组x的最后一个元素删除


var arr1=[1,2,3];
arr1.push(4,5);
alert(arr1);
//结果为"1,2,3,4,5"
arr1.push([6,7]);
alert(arr1)
//结果为"1,2,3,4,5,6,7"
arr1.pop();
alert(arr1);
//结果为"1,2,3,4,5"
View Code

数组的shift和unshift:

//x.unshift(value,...)
//x.shift()
//使用注解

//x代表数组对象
//value可以为字符串、数字、数组等任何值
//unshift是将value值插入到数组x的开始
//shift是将数组x的第一个元素删除

var arr1=[1,2,3];
arr1.unshift(4,5);
alert(arr1);  //结果为"4,5,1,2,3"

arr1. unshift([6,7]);
alert(arr1);  //结果为"6,7,4,5,1,2,3"

arr1.shift();
alert(arr1);  //结果为"4,5,1,2,3"
View Code

总结js的数组特性:

//  js中数组的特性
         //java中数组的特性,  规定是什么类型的数组,就只能装什么类型.只有一种类型.
         //js中的数组特性1: js中的数组可以装任意类型,没有任何限制.
         //js中的数组特性2: js中的数组,长度是随着下标变化的.用到多长就有多长.
         var arr5 = ['abc',123,1.14,true,null,undefined,new String('1213'),new Function('a','b','alert(a+b)')];
        /*  alert(arr5.length);//8
         arr5[10] = "hahaha";
         alert(arr5.length); //11
         alert(arr5[9]);// undefined */
View Code

date对象

创建对象

//方法1:不指定参数
var nowd1=new Date();
alert(nowd1.toLocaleString( ));
//方法2:参数为日期字符串
var nowd2=new Date("2004/3/20 11:12");
alert(nowd2.toLocaleString( ));
var nowd3=new Date("04/03/20 11:12");
alert(nowd3.toLocaleString( ));
//方法3:参数为毫秒数
var nowd3=new Date(5000);
alert(nowd3.toLocaleString( ));
alert(nowd3.toUTCString());

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

date方法

获取日期和时间
getDate()                 获取日
getDay ()                 获取星期
getMonth ()               获取月(0-11)
getFullYear ()            获取完整年份
getYear ()                获取年
getHours ()               获取小时
getMinutes ()             获取分钟
getSeconds ()             获取秒
getMilliseconds ()        获取毫秒
getTime ()                返回累计毫秒数(从1970/1/1午夜)

实例

function getCurrentDate(){
        //1. 创建Date对象
        var date = new Date(); //没有填入任何参数那么就是当前时间
        //2. 获得当前年份
        var year = date.getFullYear();
        //3. 获得当前月份 js中月份是从0到11.
        var month = date.getMonth()+1;
        //4. 获得当前日
        var day = date.getDate();
        //5. 获得当前小时
        var hour = date.getHours();
        //6. 获得当前分钟
        var min = date.getMinutes();
        //7. 获得当前秒
        var sec = date.getSeconds();
        //8. 获得当前星期
        var week = date.getDay(); //没有getWeek
        // 2014年06月18日 15:40:30 星期三
        return year+"年"+changeNum(month)+"月"+day+"日 "+hour+":"+min+":"+sec+" "+parseWeek(week);
    }

alert(getCurrentDate());

//解决 自动补齐成两位数字的方法
    function changeNum(num){
    if(num < 10){
        return "0"+num;
    }else{
        return num;
    }

}
//将数字 0~6 转换成 星期日到星期六
    function parseWeek(week){
    var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
    //             0      1      2      3 .............
    return arr[week];
}
//设置日期和时间
//setDate(day_of_month)       设置日
//setMonth (month)                 设置月
//setFullYear (year)               设置年
//setHours (hour)         设置小时
//setMinutes (minute)     设置分钟
//setSeconds (second)     设置秒
//setMillliseconds (ms)       设置毫秒(0-999)
//setTime (allms)     设置累计毫秒(从1970/1/1午夜)
    
var x=new Date();
x.setFullYear (1997);    //设置年1997
x.setMonth(7);        //设置月7
x.setDate(1);        //设置日1
x.setHours(5);        //设置小时5
x.setMinutes(12);    //设置分钟12
x.setSeconds(54);    //设置秒54
x.setMilliseconds(230);        //设置毫秒230
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日5点12分54秒

x.setTime(870409430000); //设置累计毫秒数
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日12点23分50秒

日期和时间的转换

日期和时间的转换:

getTimezoneOffset():8个时区×15度×4分/度=480;
返回本地时间与GMT的时间差,以分钟为单位
toUTCString()
返回国际标准时间字符串
toLocalString()
返回本地格式时间字符串
Date.parse(x)
返回累计毫秒数(从1970/1/1午夜到本地时间)
Date.UTC(x)
返回累计毫秒数(从1970/1/1午夜到国际时间)

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)    返回角的正切。

//方法练习:
        //alert(Math.random()); // 获得随机数 0~1 不包括1.
        //alert(Math.round(1.5)); // 四舍五入
        //练习:获取1-100的随机整数,包括1和100
             //var num=Math.random();
             //num=num*10;
             //num=Math.round(num);
             //alert(num)
        //============max  min=========================
        /* alert(Math.max(1,2));// 2
        alert(Math.min(1,2));// 1 */
        //-------------pow--------------------------------
        alert(Math.pow(2,4));// pow 计算参数1 的参数2 次方.

function对象

1 function 函数名 (参数){
<br>    函数体;
2     return 返回值;
3 }

功能说明:

可以使用变量、常量或表达式作为函数调用的参数
函数由关键字function定义
函数名的定义规则与标识符一致,大小写是敏感的
返回值必须使用return
Function 类可以表示开发者定义的任何函数。

用 Function 类直接创建函数的语法如下:

var 函数名 = new Function("参数1","参数n","function_body");

虽然由于字符串的关系,第二种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。

function func1(name){
    alert('hello'+name);
    return 8
}

    ret=func1("yuan");
    alert(ret);


var func2=new Function("name","alert(\"hello\"+name);")
func2("egon")

注意:js的函数加载执行与python不同,它是整体加载完才会执行,所以执行函数放在函数声明上面或下面都可以:

如前所述,函数属于引用类型,所以它们也有属性和方法。
比如,ECMAScript 定义的属性 length 声明了函数期望的参数个数。

alert(func1.length)

function的调用

function func1(a,b){

    alert(a+b);
}

    func1(1,2);  //3
    func1(1,2,3);//3
    func1(1);    //NaN
    func1();     //NaN

    //只要函数名写对即可,参数怎么填都不报错.

-------------------面试题-----------
 function a(a,b){
    alert(a+b);
}

   var a=1;
   var b=2;
   a(a,b)

函数的内置对象arguments

 
function add(a,b){

        console.log(a+b);//3
        console.log(arguments.length);//2
        console.log(arguments);//[1,2]

    }
    add(1,2)

    ------------------arguments的用处1,相当于python中“*args”接收参数------------------
    function nxAdd(){
        var result=0;
        for (var num in arguments){
            result+=arguments[num]
        }
        alert(result)

    }

    nxAdd(1,2,3,4,5)

//     ------------------arguments的用处2 ------------------

    function f(a,b,c){
        if (arguments.length!=3){
            throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments")
        }
        else {
            alert("success!")
        }
    }

    f(1,2,3,4,5)

BOM对象

alert()            显示带有一段消息和一个确认按钮的警告框。
confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt()           显示可提示用户输入的对话框。

open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
close()            关闭浏览器窗口。

setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval()    取消由 setInterval() 设置的 timeout。
setTimeout()       在指定的毫秒数后调用函数或计算表达式。
clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
scrollTo()         把内容滚动到指定的坐标。
 BOM cursor
HTML DOM cursor 属性

HTML DOM Style 对象
定义和用法

cursor 属性规定所显示的指针(光标)的类型。
语法:

Object.style.cursor=cursortype

可能的值
值     描述
url     

需被使用的自定义光标的URL

注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标。
default     默认光标(通常是一个箭头)
auto     默认。浏览器设置的光标。
crosshair     光标呈现为十字线。
pointer     光标呈现为指示链接的指针(一只手)
move     此光标指示某对象可被移动。
e-resize     此光标指示矩形框的边缘可被向右(东)移动。
ne-resize     此光标指示矩形框的边缘可被向上及向右移动(北/东)。
nw-resize     此光标指示矩形框的边缘可被向上及向左移动(北/西)。
n-resize     此光标指示矩形框的边缘可被向上(北)移动。
se-resize     此光标指示矩形框的边缘可被向下及向右移动(南/东)。
sw-resize     此光标指示矩形框的边缘可被向下及向左移动(南/西)。
s-resize     此光标指示矩形框的边缘可被向下移动(北/西)。
w-resize     此光标指示矩形框的边缘可被向左移动(西)。
text     此光标指示文本。
wait     此光标指示程序正忙(通常是一只表或沙漏)。
help     此光标指示可用的帮助(通常是一个问号或一个气球)。

DOM对象

  •     HTML  Document Object Model(文档对象模型)
  •     HTML DOM 定义了访问和操作HTML文档的标准方法
  •     HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)

节点

HTML 文档中的每个成分都是一个节点。

DOM 是这样规定的:
    整个文档是一个文档节点
    每个 HTML 标签是一个元素节点
    包含在 HTML 元素中的文本是文本节点
    每一个 HTML 属性是一个属性节点

节点关系

节点树中的节点彼此拥有层级关系。
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  •     在节点树中,顶端节点被称为根(root)
  •     每个节点都有父节点、除了根(它没有父节点)
  •     一个节点可拥有任意数量的子
  •     同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:

节点查找

document.getElementById(“idname”)//根据id值查找
document.getElementsByTagName(“tagname”)//根据标签查找
document.getElementsByName(“name”)//根据name查找
document.getElementsByClassName(“name”)//根据class名查找

实例

<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);
////不支持
//   var ele3=div1.getElementById("div3");
//   alert(ele3.length);
////不支持
//   var ele4=div1.getElementsByName("yuan");
//   alert(ele4.length)

</script>

局部查找

导航查找

parentElement           // 父节点标签元素

children                // 所有子标签

firstElementChild       // 第一个子标签元素

lastElementChild        // 最后一个子标签元素

nextElementtSibling     // 下一个兄弟标签元素

previousElementSibling  // 上一个兄弟标签元素

标签操作

文本操作:

DOM对象.innerText(标签的文本内容作为字符串)
DOM对象.innerHTML(标签内的所有内容作为字符串)
赋值操作:
DOM对象.innerHTML="<p>hello world</p>"
DOM对象.innerText="<p>hello world</p>"

 

属性操作

获取属性:
DOM对象.属性名
设置属性:
DOM对象.属性名=值
相当于
获取属性:
DOM对象.getAttribute("属性名")
设置属性:
DOM对象.setAttribute("属性名",“值”)

value:
        input,select,textarea
class属性
DOM对象.classList.add("hide");
DOM对象.classList.remove("c1");

 实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .hide{
            display: none;
        }
    </style>
</head>
<body>

<input type="text" id="inp" value="123" class="c1" >


<script>
    //var ele_p=document.getElementById("d1");

    // Dom对象.on事件=function(){}

    var eles_p=document.getElementsByClassName("c1"); //dom集合 []

    for (var i=0;i<eles_p.length;i++){
        eles_p[i].onclick=function () {
            //  this  当前点击标签

            //this.innerHTML="hello world"
            this.innerText="hello world"

        }
    }


    var ele_inp=document.getElementById("inp");

    ele_inp.onclick=function () {

//        console.log(this.value);
//        this.value="hello"

        console.log(this.getAttribute("value"));
        this.setAttribute("value","666");

//         this.classList.add("hide"); //隐藏属性
//         this.classList.remove("c1");

        this.style.color="red";//属性的样式设置
        this.style.border="green 1px solid"

    }

    var ele_select=document.getElementById("s1");
</script>
</body>
</html>

 

节点操作

1、创建节点

document.creteElement("a");

2、添加节点

父节点.appendChild(添加节点)

3、删除节点

父节点.removeChild(子节点)

4、替换节点

父节点.replaceChild(新节点,被替换节点)

使用之添加节点:
1)var  变量对象=document.createElement("a")  相当于创建了个标签<a></a>

2)变量对象.属性=3)获取要添加位置的父节点

4)父节点.appendChild(变量对象)

使用之删除节点:
1、获取要删除的节点,获取要删除的节点的父节点
2、父节点.removeChild(子节点)

使用之替换节点:
1)var 对象名 = document.createElement("img")
2)设置属性 对象名.src =  "egon.jpg";
3)找到要被替换的标签 及父节点
4)父节点.replaceChild(新节点,替换节点)

实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .outer{
            width: 300px;
            height: 300px;
            border: 1px solid red;
        }
    </style>
</head>
<body>


<div class="outer">
   <h1>hello</h1>


</div>


<hr>
<button class="add">ADD</button>
<button class="del">del</button>
<button class="change">change</button>


<script>
    var ele_addBtn=document.getElementsByClassName("add")[0];
    var ele_delBtn=document.getElementsByClassName("del")[0];
    var ele_changeBtn=document.getElementsByClassName("change")[0];
    var ele_outer=document.getElementsByClassName("outer")[0];
    var ele_h1=ele_outer.getElementsByTagName("h1")[0];


    ele_addBtn.onclick=function () {
       // 创建节点对象

        var ele_a=document.createElement("a"); //  <a></a>

        ele_a.innerHTML="click";  // 文本赋值

        ele_a.href="http://www.baidu.com";

        console.log(ele_a);

        // 添加节点对象  父节点.appendChild(添加节点)

        ele_outer.appendChild(ele_a)
    };

    // 删除节点操作  父节点.removeChild(子节点)
    
    ele_delBtn.onclick=function () {


        ele_outer.removeChild(ele_h1)


    };


    // 替换节点  父节点.replaceChild(新节点,被替换节点)

    ele_changeBtn.onclick=function () {
         // 创建新节点

        var ele_img=document.createElement("img");  // <img>
        ele_img.src="egon.jpg";
        ele_img.width=100;
        ele_img.height=100;


        // 找被替换标签 ele_h1   父节点:ele_outer

        ele_outer.replaceChild(ele_img,ele_h1)
    }
</script>


</body>

 事件

onclick 单击事件

ondblclick 双击事件

onload事件 加载事件

onsubmit事件 用条件阻止默认事件发生,阻断可用 return false;

 onkeydown事件 键盘事件

onselect 事件

onmouseover 事件

阻止事件传播:当存在相同区域时,添加事件会导致重复区域拥有共同事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .outer{
            width: 200px;
            height: 200px;
            background-color: #2459a2;
        }
        .inner{
            width: 100px;
            height: 100px;
            background-color: goldenrod;
        }
    </style>
</head>
<body>


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



<script>
    var outer=document.getElementsByClassName("outer")[0];
    var inner=document.getElementsByClassName("inner")[0];

    outer.onclick=function (e) {
        alert(1234)
    };
    inner.onclick=function (e2) {
          alert(888);

        // 阻止事件传播

        e2.stopPropagation()
    }
</script>

</body>
</html>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .hide{
            display: none;
        }
    </style>
</head>
<body>
<select name = "" id="s1">
    <option value ="111">河北省</option>
    <option value ="222">河南省</option>
    <option value ="333">东北省</option>
</select>

<script>
    var ele_inp = document.getElementById("s1")
    ele_inp.onchange = function (){
            console.log(s1.value)
    }
</script>
</body>
</html>

 

 

 一些小实例

遮罩层实例

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

            height: 2000px;
        }
        .shade{
            position: fixed;
            top:0;
            bottom:0;
            left:0;
            right:0;
            background-color: darkgray;
            opacity: 0.4;
        }
        .model{
            width:400px;
            height: 300px;
            background-color: white;
            position: fixed;
            top:100px;
            left:450px;
        }
        .hide{
            display: none;
        }
    </style>
</head>
<body>


<div class="back">
    <button class="show">show</button>
</div>
<div class="shade hide"></div>
<div class="model hide">
    <form action="">
        <p>姓名<input type="text"></p>
        <p>年龄<input type="text"></p>
        <p>班级<input type="text"></p>
        <p>
            <input type="button" value="提交">
            <input type="button" value="取消" class = cancel>
        </p>
    </form>
</div>
<script>
    var ele = document.getElementsByClassName("show")[0]
    var ele_cancel=document.getElementsByClassName("cancel")[0]
    var ele_shade = document.getElementsByClassName("shade")[0]
    var ele_model = document.getElementsByClassName("model")[0]
    ele.onclick = function () {
        ele_shade.classList.remove("hide")
        ele_model.classList.remove("hide")
    }
    ele_cancel.onclick=function () {
        ele_shade.classList.add("hide")
        ele_model.classList.add("hide")
    }

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

 

javascript利用alert弹框

<html>
<head>
    <title>javascrip</title>
    <script>
        document.write("<h1>alert弹框</h1>")
        alert("欢迎!")
    </script>
</head>
<body>
</body>

</html>

点击按钮事件进行弹框

<html>
<head>
</head>
<body>
  <button type="button" onclick="alert('欢迎!')">点我!</button>
</body>
</html>

对用户输入进行规则校验

<html>
<body>
<input id="demo" type="text">
<script>
function myFunction()
{
//获取id为demo标签的value,并进行规则校验
var x=document.getElementById("demo").value;
if(x==""||isNaN(x))
    {
    alert("不是数字");
    }
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
</body>
</html>

点击更换文本内容

<html>
<body>
JavaScript 能改变 HTML 元素的内容。
<script>
function myFunction()
{
x=document.getElementById("demo");  // 找到元素
x.innerHTML="Hello JavaScript!";    // 改变内容
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>
</body>
</html>

 标签切换

<html>
<head>
 <style>

  #box{
        height:40px;
        width:80%;
        margin: 100px auto;
        background-color:#f7f7f7;
        float:left;
        border-bottom:1px solid red;
    }
  #box div{
        text-decoration:none;
        color:#666;
        font-size:14px;
        height:40px;
        width:100px;
        float:left;
        text-align:center;
        line-height:40px;
    
}
#box div:hover{
        color:red;
    }

            
   #context>div{
        position:absolute;
        height:300px;
        width:80%;
        
 }
 
 .product_title{
        height:40px;
        width:100%;
        background-color:#f7f7f7;
        float:left;
        margin-top:20px;
 }
 
 .c_position{
    position:relative;
    top:150px;
 }
 .hide{
    display:none;
 }
 




 </style>
 

</head>
<body>

<div id = "box">
    <div id = "Commodity_introduction" class="click" >111</div>
    <div id = "after_sale_service" class="click" >222</div>
    <div id = "Commodity_evaluation"  class="click" >333</div>
</div>

<div id = "context">
    <div id = "Commodity_introduction_context" class="c_position" >111
    </div>
    <div id = "after_sale_service_context" class="c_position hide" >222
    </div>
    <div id = "Commodity_evaluation_context" class="c_position hide">333</div>

</div>

 <script>
    var box = document.getElementsByClassName("click");//获取class等于click的标签
    for (var i=0;i<box.length;i++) {//循环隐藏所有内容
    box[i].onclick=function(){
        var content = document.getElementsByClassName("c_position")
        for(var j=0;j<content.length;j++){
            content[j].classList.add("hide");
        }
        //根据点击拼接对应的内容区域id
        var merge_context=this.id+"_context"
        var display_context = document.getElementById(merge_context);
        display_context.classList.remove("hide");//隐藏
    }
    }
 </script>

</body>
</html>

展示

 

posted @ 2017-10-16 09:53  wateligx  阅读(204)  评论(0编辑  收藏  举报