函数事件

 
                                                                                                                    

 

 

 

DOM树节点:


DOM节点分为三大类,元素节点,属性节点,文本节点;

文本节点,属性节点属于元素节点的子节点,操作时,均需要取到元素节点,在操作子节点

可以使用getElement系列方法,取到元素节点。

 

【查看元素节点】

getElementById:通过id取到唯一节点,如果id重名只能取到第一个
 getElementByName():通过name属性
 getElementTagName():通过标签名;
 getElementClassName():通过Class名;

给大家详解一下怎么取到节点:

在body里面做一个ID为DIV1的div

<body><div id="div1">haha</div></body>

 

在script里面

window.onload=function(){
var div1 =document.getElementById("div1")}

取到节点

 

但是需要注意的是:

 

获取元素节点时:一定要注意:获取节点的语句,必须在DOM渲染完成之后执行,可以有两种实现方式:
 ①:将JS代码写在body之后;
 ②将代码写到window.onload函数之中


后面三个getElements取到的是数组格式,不能直接添加各种属性,而应该取出数组的每一个单独操作。

 eg:   getElementByName("name1")[0].onclick = function

 

 

[查看设置属性节点]
 1查看设置属性节点:getAtteribute("属性名")
 2 设置属性节点: setAtteribute("属性名;新属性值")

也需要注意:

 

查看和设置属性节点。必须先取到元素节点,才能使用;
 setAtteribute():函数在ie中可能给出现兼容性问题;比如在IE中,* 不支持使用这个函数设置style/onclick等样式属性和时间属
我们推荐使用后点符号法替代上述函数。
 eg:dom1.style.color="" dom1.onclick="" dom1.src=""

 

[js修改DOM节点的样式]
 1使用 setAtteribute()设置class和style属性。但是存在兼容性问题;不提倡
 div.setAatteribute("class","cls1");
 2,使用.clssName直接设置class类;注意是className,而不是.class
div.className= "cls1";
 3使用.style设置单个属性;注意属性名要是驼峰命名法则!

div.style.backgroundColor = "red";
 4 使用.style 或 .style.cssText 设置多个样式属性!
 div.style.cssText=" background-color:red; color:yellow;"推荐使用第二种;

 

 

[查看使用文本节点]
.innerText:取到或设置节点里面的文字内容!
.innerHTML:取到或者设置节点里面的HTML代码

 .tagName:取到当前节点的标签名,标签名全部大写显示

window.onload=function(){
                 var btn1 = document.getElementById("btn1");
                var div1 =document.getElementById("div1")
           btn1.onclick = function(){
                div1.innerText = "hehe";    
                div1.innerHTML="<h1>hehe</h1>"
                alert(div1.innerText);
                alert(div1.innerHTML);
                alert(div1.tagName);
            }    
           }
        <body>
        <div id="div1">haha</div>
        <button id="btn1" class="btn">这是一个按钮1</button>
    </body>
在JS代码中取到ID节点!! 做一个点击按钮!用函数表示:
上述结果依次是:刚开始的样式是:

 


1:点击那妞打印hehe:

 

2 HTML是取到HTML代码形式,因此加上H1标签,代码会成标题标签:

 


3 打印DIV1的内容:

 


4 打印他的HTMI代码:

 


5 打印DIV1的标签名:

 




 

 2

 

[根据层次获取节点]
 1 .childNodes:获取元素的所有子节点,包括回车等文本节点。
.children:获取当前元素的所有元素节点(只获取标签)。

 2 .firstChild:获取元素的第一个子节点,包括回车等文本节点;
 .firstElementChild: 获取元素的第一个子节点,不包括回车等文本节点
 .lastchild:获取元素的最后第一个子节点,包括回车等文本节点;
 .lastElementChild:获取元素的最后第一个子节点,不包括回车等文本节点
3 .parentNode:获取当前节点的父节点


 4.previousSibling:获取当前节点的前一个兄弟节点,包括回车等文本节点;
 .previousElementSibling;

 5 .nextSibling:获取当前节点的后一个兄弟节点,包括回车等文本节点
 .nextElementSibling;
 6 .getAttributes:获取当前节点的属性节点。

 

 

[创建并新增节点]
1 creatElement("标签名"):创建节点,需要配合 setAttribute 使用
2 父节点 appendChild(): 末尾追加方式插入节点
3 父节点 insertBefore(新节点,老节点): 在制定节点前插入新节点
4 被克隆节点 cloneNode(true/false): 克隆节点
传入true:表示克隆当前节点。以及当前节点的所有子节点:
传入false或不传:表示只克隆当前节点,而不克隆子节点。



[删除或者替换节点]
1 父节点: .removeChild(被删除节点):删除父节点里面的子节点;
2父节点: .replaceChild(新节点,老节点)使用新节点替换掉老节点

 

 

<body>
        <button onclick="addImg()">添加一副图片</button>
        <button onclick="cloneUl()">添加一副图片</button>
        <button onclick="delUl()">删除UL</button>
        <button onclick="replaceUl()">用h1替换ul</button>
        
          <ul id="ul">
          <li>111</li>
           <li>111</li>
          </ul>
</body>

<script>
function addImg(){ var img= document.createElement("img"); img.setAttribute("src","../../../02css基础属性/css文件夹/img/QQ图片20170726153653.gif"); var ul =document.getElementById("ul"
); document.body.insertBefore(img,ul); }


先取到节点img 创建一个新节点 img
插入一个图片
取到节点ul 将图片插入img插入ul前面

点击添加图片可以看出图片在UL前面,当然可以多次添加!

 

 

function cloneUl(){
var ul =document.getElementById("ul");
var ulClone = ul.cloneNode(true);
document.body.appendChild(ulClone);
}

 

同样,先去到节点ul,克隆一个ul,传入true, 将克隆的ul插入后面

 




function delUl(){ var ul = document.getElementById("ul"); if(ul){ document.body.removeChild(ul); }else{
alert("ul已经被删了!") } }



 



function replaceUl(){
var ul=document.getElementById("ul")
var h1 =document.createElement("h1")
h1.innerText ="这是一个新创建的H1";
h1.setAttribute("width","500");
document.body.replaceChild(h1,ul);

}

取到节点UL,创建一个新节点h1;
给h1输入内容,使用innerText标签输入内容!
配合.setAttribute设置熟属性.
进行新节点替换老节点


 





 

 

 

 

[表哥对象]
 1 rows属性:返回表格中的所有行,是一个数组格式;
 2 insertRow(index):在指定位置插入一行,index从0开始;
 3 deleteRow(index):删除指定一行,index从0开始;

 


[行对象]
1。cells属性,返回这一行中的所有单元格,是一个数组格式;
2 。rowIndex属性:返回这一行是表格中的第几行,从0开始;
3. insertCell(index):在这一行指定位置插入一个单元格,index从0开始
4 ,deleteCell(index);删除这一行中的指定单元格,index从0开始;


[单元格对象]
1 cellIndex属性:返回这单元格是本行的第几个,从0开始;
2 innerText:取到或设置节点里面的文字内容!
3 innerHTML:取到或者设置节点里面的HTML代码
4 align:
5 className:

 

 

 

 

 

 

 

1.事件冒泡:

当某DOM元素触发一种事件时,会从当前节点开始,逐级往上触发其祖先
节点的同类型事件,直到DOM根节点
什么情况下会产生事件冒泡?
 ①:DOM0模型绑定事件全部都是冒泡;
 ⑤IE8之前,使用attachEvent()绑定的事件,全部都是冒泡;
③:其他浏览器,使addEventlinstener()添加事件。当第三个参数省略或者为false时候,为事件冒泡

 2 。事件捕获:当某DOM元素触发某一件事件时,
 会从文档根节点开始,逐级向下触发其祖先节点的同类型事件,知道该节点自身
 》》》 什么情况下会触发事件捕获?
 ①:使用addEventlinstener()添加事件,当第三个参数为TRUE是,为事件捕获


 ↓ DOM根节点 ↑
 ↓ ↑
 捕 爷爷节点 冒
 ↓ ↑
 获 父节点 泡
 ↓ ↑
 ↓ 当前节点 ↑


 3 阻止事件冒泡:
 在IE浏览器中,使用e.cancelBubble = true;
 在其他浏览器中使用e.stopPropagation()
 兼容其他浏览器的写法:

function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE以外
} else {
e.cancelBubble = true; //IE 8前
}
}

 4取消事件默认行为
在IE浏览器中,使用e.returnValue = false;
在其他浏览器,使用e.preventDefault();

兼容所有浏览器的写法:
function eventHandler(e) {
e = e || window.event;
// 防止默认行为
if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
}

 

 

 

[js里面的时间分类]
1 .鼠标事件
click . dblcick .onmouseover/onmouseout
2 HTML事件
onload /onscroll/onsubmit/onfocus

3 键盘事件
keydown :键盘按下去触发
keypress:键盘按下松开的瞬间触发
keyup:键盘抬起时候触发

[注意事项]
① 执行顺序: keydown->keypress->keyup
② 当长按时:会循环执行keydown->keypress
③ 有keydown并不一定有keyup;当事件触发过程中,鼠标将光标移走,将导致没有keyup
④ keypress :只鞥捕获键盘上的数字键,字符,符号键,不能捕获各种功能键。而keydown和keyup可以
⑤ keypres :支持区分大小写,keydown和keyup并不支持
【确定出发的按键】
① 在触发的函数中,存入一个参数e,表示键盘事件;
②: 使用e.keyCode取到支持的Ascii码值,进而确定触发按键;
③ 素有浏览器的兼容写法(一般并不需要)
var evn = e ||event;
var code = evn.keyCode|| even .which|| evn.charCode;

 

 

 

[js中的事件模型]
1. 内联模型(行内绑定):直接将函数0作为HTML标签额某个事件属性的属性值
 eg:<button onclick="func()">DOM0内联模型</button>
 优点:使用方便简洁
 缺点:违反了W3C关于HTML与javacsript分离的基本原则;
 2.脚本模型(动态绑定),在JS脚本中取到某个标签,并添加事件属性,
 eg:window.onload=function(){}
 优点:实现了W3C关于HTML与javacsript分离的基本原则;
 缺点:同一个节点只能绑定一个同类型事件,如果绑定多次,最后一个生效。

[DOM2事件模型]
1.添加绑定事件方式:
① IE8之前:btn2.attachEvent("onclick",函数);
 ②:其他浏览器btn2.addEventListener("click",函数,TRUE/FALSE);
 参数三:false(默认) 表示事件冒泡 true 表示事件捕获

 ③ 兼容写法: if(btn2.attachEvent){
 btn2.attachEvent();
 }else{
 btn2.addEventListener();
 }

 2优点:可以给同一节点添加同一类型的事件
 ②:提供了可以取消事件绑定的函数

 3取消DOM2的事件绑定,:
 注意:如果要取消DOM2的事件绑定,那么在绑定事件时,处理函数必须要使用有名函数
 而不能使用匿名函数,
 btn2.removeEventListener("click",func2);
 btn2.detachEvent("onclick",func2);

 

3

 

[js中的数组]

 数组的基本概念?
 数组实在内存空间中连续存储的一组有序数据的集合
 元素在数组中的顺寻,称为下标,可以使用下标访问数组的每个元素。

 

 

如何声明一个数组?
 ①:使用字面量声明:var arr=[] ;    //切记是中括号

在JS中,同一个数组可以存贮多种数据类型
例如var arr=[1,"jianghao",true,{},null,func];

 

②:只用NEW关键字声明:var arr =new Array(参数);
 》》》参数可以是:
 a。 参数省略,创建一个空数组;
 b。参数为一个整数,表示声明一个length为指定长度的数组,但是这个length可以随时可变可追加。
 c. 参数为逗号分隔的多个数值,表示数组的多个值,
 new array(1,2,3) == [1,2,3]

 

 

3 数组中元素的读写/增删
 ①:读写:通过下标访问元素,下标从0开始 arr[1]="haha";
②;a增删: 使用DELETE关键字,删除数组的某一个值,删除之后,数组的长度不变,对应的关键字
变为Undefined,eg:delete arr[1];
 b: arr.pop():删除数组的最后一个值,相当于arr.length -= 1
 c: arr.shift(): 删除数组的第一个值.
 d: arr.unshift():在数组的第0个位置新增一个值;
e: arr.push():在末尾增加一个值;
 f: 直接访问数组没达到的下标,可以动态追加;
 arr[100]=1; 中间如果有空余下标,将存入Undefined。

 

 

var arr=[1,2,3,4,5,6,7,8,12];
       delete arr[3];
      // arr.length -=1;
        //arr.pop();
        //arr.shift();
        //arr.unshift("haha");
       // arr.push("haha");
       
      // var arr=[1,2,3,4,5,6];
     //  var str = arr.join("-");
        console.log(arr);

1:arr. delete():删除下标为3的数组,即删除书里面的4,,变为undefined

2 arr.pop() :删除最后一个值

3 arr.shift():删除第一个屁;

 

 4 arr.unshift("haha"):在低0个位置增加一个值:

 

5 arr.push("haha"):

 


 

 


 

 

4.数组中的其他方法:
 ①:join():将数组用制定分隔符连接成字符串,当参数为空时,默认为逗号分隔
②:concat():【原数组不会被改变】将数组,与两个与多个数组的值链接为新数组,

 连接时候,如果有二维数组,则至多能拆一层[]
 [1,2].concat([3,4],[5,6])->[1,2,3,4,5,6]
[1,2].concat([3,4[5,6]])-->[1,2,3,4,[5,6]]

  var arr=[1,2,3,4,5,6];
     var str = arr.join("-");
        console.log(str);



 arr=[1,2].concat([3,4,[5,6]]);

 





 

 

arr.reverse()原数组被改变,将数组翻转,倒叙输出
⑤:slice(begin,end):[原数组不会被改变]截取数组中的某一个部分,并返回截取的新数组
>>>传入一个数组,表示开始区间,默认将截到的数组最后;
》》》传入两个参数,表示开始和结束下标区间,左闭右开区间(包含begin,不包含end)
》》》两个参数可以为负数,表示可以从右边开始,最后一个值为-1;

 

 

 

var arr=[1,2,3,4,5,6,7,8,12];
        arr.reverse();
        var arr1=arr.slice(3,7);
        //var arr1=arr.slice(-3,-1);    
        console.log(arr1);

 

var arr=[1,2,3,4,5,6,7,8,12]; 
       // var arr1=arr.slice(3,7);
       var arr1=arr.slice(-3,-1);    
        console.log(arr1);

 



 

 

 

⑥:sort():【原数组被改变】将数组进行升序排列:
>>>默认情况下会按照每个元素的首字母的ASCII值进行排列
[1,2,3,4,5,6,7,8,12,112]-->[1,112,12,2,3,4,5,6,7,8]

》》》可以传入一个比较函数,手动指定排序的函数函数算法;
函数将默认接受两个值a,b ,如果返回值>0 ,证明a>b;如果返回值<0 ,证明a<b;
arr.sort(function(a,b){
return a-b;升序排列:
return b-a;降序排列:
});

 

 

    var arr=[2,1,4,3,5,6,7,8,12];
        arr.sort(function(a,b){
            if(a>b){
                return 1;
            }else if(a<b){
                return -1;
            }else{
                return 0;
            }
            return a-b;//升序排列
            return b-a;//降序排列
        });
            
        console.log(arr);

 

 

 

 indexOf(value,index)返回数组中的第一个value值所在的下标,如果没有返回-1;

lastindexOf(value,index)  返回数组中最后一个value值所在的下标,如果没有返回-1;

 

》》》如果没有指定index,则表示全数组查找value;
》》》如果指定了index,则表示从index开始,向后查找value;

 

var arr=[2,1,4,3,5,6,7,8,12];
var index=arr.indexOf(1);
console.log(index)

 

 

 

⑧: arr.forEach(function(item,index){
console.log(item);
})
forEach专门用于循环便利数组,接受一个回调函数,回调函数接受两个参数,第一个参数为数组的每一项值,
第二个参数表示每一个参数的下标;【IE8之前不支持】


 

 

 

⑨:var arr1=arr.map(function(item,index){
console.log(item);
return item + 2;
})
console.log(arr1);
map:数组映射,使用方式与forEach相同,不同的是,map可以有return返回值,表示将原数组的每个值进行操作后,
返回给一个新数组【IE8也不支持】

 

    
        var arr=[2,1,4,3,5,6,7,8,12];
    var arr1=arr.map(function(item,index){
            
            return item + 2;
        })
        console.log(arr1);

 




 

 

 

Boolean类
 两种声明方式
可以使用字面量方式声明一个单纯的变量
也可以使用new Boolean()声明一个Boolean类型的对象,用type检测为Object类型

 number
 Number.MAX_VALUE 返回Number类表示的最大值;
Number.MIN_VALUE 返回Number类表示的最小值;

 .toString():将数值类型转化为字符串类型
.toLocaleString():将数值按照本地格式顺序转换为字符串,一般从右开始,三个加一个逗号分隔;

 .toFixed(n):将数值保留n为小数,并转为字符串格式

 .toPrecision(n):将数字转化为指定长度,N表示不含小数点的位数长度,如果n<原来数字长度,则用科学
 计数法表示,如果n<原数字长度,则小数点后补0
 .valveOf():返回Number对象的基本数字值;

 

 

String类型
 1.属性:Str.length返回字符串的长度,也就是字符数;
 字符串支持类似数组的下标访问方式 :str[0];
2方法:.toLowerCase();将字符串的所有字符转成小写,
.toUpperCase();将字符串的所有字符转成大写,
.charAt(n):截取数组的第N个子字符,相当于str[n];
.indexOf("str",index):从index位置开始查找,子串在字符串中的出现的位置,
如果没有找到返回-1;其他从数组的indexOf方法:
.lastIndexOf():同数组
.substring(begin,end):从字符串中截取子串;
》》》只传入一个参数,表示从begin开始;到最后
》》》传入两个参数,表示从begin到end的区间,左闭右开。
.split("分隔符"):将字符串以制定分隔符分隔,存入数组中。传入空""表示将字符串
的每个字符分开放入数组,
.replace("old","new"):将字符串的第一个old替换为new;
>>>第一个参数,可以是普通字符串,也可以是正则表达式;
》》》如果是普通字符串,则只替换第一个old,如果是正则表达式。则可以根据正则的写法要求
进行替换。

 

 

var str="JiangHao Is ShuaiGe!";
            //var str1=str.toLowerCase();
            //var str1=str.toUpperCase();
            //var str1=str.charAt(0);
            //var str1 =str.indexOf("an")
            //var str1 = str.substring(5,15);
            //var str1 =str.split("").join("")
             // var str1 =str.replace("i","*");//只替换字符串的第一个i
             //var str1 =str.replace(/i/g,"*");//替换字符串的所有i
             console.log(str1);

1:toLowerCase():字符串全部小写;
2:.toUpperCase():字符串全部大写;
3:.charAt(0);截取第0个字符:

4 .indexOf("an"):查找字符串位置

5:str.substring(5,15);截取字符串 左闭右开

6:.split(""):

7:.replace("i","*") :只替换第一个i:

8:.replace(/i/g,"*")替换所有i

 













 

 

 date  日期类

 

 

1。 new Date():返回当前最新时间
new Date("2017,8,23,12:34:56");返回指定的时间
 2 常用方法:

 dates.getFullYear();获取四位年份
 dates.getMonth():获取月份 0-11月
 dates.getDate():获取一个月中的第几天 1-31;
 dates.getDay();获取一周中的第几天,0-6 ,0表示周天;
 getHours():获取小时;
 getMinutes():获取分钟;
 getSeconds():获取秒;

 

<script>
function getTime (){
var dates =new Date(); var year=dates.getFullYear(); var month=dates.getMonth(); var date1= dates.getDate(); var day =dates.getDay(); var weeks =["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; var hours=dates.getHours()<10? "0"+dates.getHours():dates.getHours(); var minutes=dates.getMinutes()<10? "0"+dates.getMinutes():dates.getMinutes() var seconds=dates.getSeconds()<10? "0"+dates.getSeconds():dates.getSeconds(); var div1=document.getElementById("div1"); div1.innerText = year+""+(month+1)+""+date1+""+weeks[day]+hours+":"+minutes+":"+seconds; } setInterval(getTime,1000); window.onload=function(){ getTime(); } </script> </head> <body> <div id="div1"></div> </body>

 

 

 

 【自定义对象】

 

①:对象:是拥有一系列无序属性跟方法的集合;
 ②:键值对:对象中的数据是以键值对的形式存在,对象的每个属性和方法都对应一个键名,以键取值
 ③:属性:描述对象特征的一系列变量称为属性,【对象中的变量】
 ④:方法:描述对象行为的一系列函数。称为方法【对象中的函数】

 

 

2.声明对象:
 ①:字面量声明 var obj={
 key1:value1,
key2:value2,
 func1:function(){}}

注意:

>>>对象中的数据是以键值对形式存储,键与值之间用:分隔,多个键值对中间用,分隔
 >>>对象中的键可以是除了数组/对象以外的任何数据类型,但是一般我们只用普通的变量名作为键
 》》》对象的值可以是任何数据类型,包括数组和对象

 

②:使用NEW关键字声明。 var Obj =new Object();
 obj.key1=value1;
 obj.func1=function(){}

 

var person={
            name:"张三",
            "haha":["张三"],
            age:14,
            say:function(){
                alert("我会说话!");
            }
            }

            console.log(person.name);
            console.log(person.age); 

            console.log(person.say);

            



var person = new Object()

person.name="张三",
person.age=14,
person.say=function(){
alert("我会说话");
}
console.log(person.name);
console.log(person.age);
console.log(person.say);


 

 

 

 

 

 

 

 

 

 

 

 

 

3. 对象中属性跟方法的读写:
 ①:运算符:对象名。属性 对象名。方法();
 对象内部:this.属性 this.方法()
 对象外部: 对象名.属性 对象名.方法();

②:通过["key"]调用:对象名.["属性名"] 对象名.["方法名"]();
 》》》如果键中包括特殊字符,只能使用第二种方式;
 》》》对象中直接写对象名默认为全局变量,若要调用对象自身的属性或者方法。需要使用对象名
 ,属性,或者this.属性
 person.age this.age 都可以,但推荐使用this关键字。

③:删除对象的属性和方法,使用delete 对象名.属性名/方法名
 delete person.age;

 

 

 

var person={
            name:"张三",
            age:14,
            say:function(){
                alert("我叫"+this.name+",今年"+person.age+"岁了");
            }
            }
             
            
            console.log(person["age"]);
            console.log(person.age);            
            person.say();


 






 

posted @ 2017-09-03 12:25  唯芸星  阅读(298)  评论(0编辑  收藏  举报