关于DOM

DOM

简介:(document object model)文本对象模型,它是html元素。提供访问和操作网页内容的方法和接口。
获取dom一共有8种方法
注:获取是元素要先初始化或者已存在。
1、4种动态获取方法:

document.getElementsByClassName();//通过class类名称获取元素,返回一个集合
document.getElementsByName()  //通过元素的name属性获取元素,返回的是一个集合
document.getElementById()  //通过元素的id获取,返回的是一个对象
document.getElementsByTagName()  //通过元素名称获取,返回的是一个集合

//集合里面获取某一个对象  使用键来获取
    console.log(btn[0]);
    console.log(btn[1]);
    console.log(btn[2]);

2、静态获取
只能获取到初始化时的元素,添加的元素获取不到

//他们当中的参数是css选择器,不可用name属性来获取
document.querySelector();//返回的是一个单个对象
document.querySelectorAll() //返回的是一个列表

3、其他两种获取方式

document.body;//获取body元素
document.documentElement;//获取html元素

获取dom之后进行操作

注:js操作dom不能操作一堆,只能单个操作,不能隐式迭代,所以要转化为单个对象进行操作
创建修改类名称

	 var btn = document.getElementsByClassName("btn")[0];
    console.log(btn);
    btn.name = "dom";  //修改或者设置name
    btn.className = "btn btninfo";//增加类名称,可同时增加多个

文本值操作

btn.innerText="修改文本";  //操作的文本
btn.innerHTML="修改文本";   //获取元素里面的子内容
//若为其修改的值中有标签,text以文本方式打印,html会自动解析再打印
console.log(btn.innerText);	//直接获取的是当前元素的文本值
console.log(btn.innerHTML);	//获取的是当前元素的子内容  包含html标签

获取行内样式和非行内样式

    console.log(btn.style.color);	//行内样式的获取方式
    btn.style.width="200px";	//给元素设置样式,为行内样式
  	btn.style.backgroundColor="pink";
  	//一次性设置多个样式,但要注意样式覆盖问题,它生效后之前的设置都无效
    btn.style="color:red;width:100px;height:30px;line-height:30px";
//获取元素的非行内样式:含有两个参数,第一个为获取该对象样式,第二个为查找元素伪元素(可有可无,或者直接写none也可)
window.getComputedStyle(对象).样式(如width);//获取对象的width样式
window.getComputedStyle(对象,":伪类").position;//获取对象伪类的position样式。
//只有元素的行内样式可修改,内嵌样式不可修改,因为样式为read-only只读的。

给元素设置自定义属性

btn.setAttricute("data-index",0);//给btn元素设置了一个data-index属性,其值为0。//设置自定义属性
btn.getAttribute("data-index");//获取自定义属性

dom元素的节点操作

<ul class="menu">
    <li class="list">第一个</li>
    文字
    <li class="list">第二个</li>
    <li class="list">第三个</li>
    <li class="list">第四个</li>
</ul>
<script>
    var menu=document.querySelector(".menu");
    console.log(menu);//获取ul
    console.log(menu.children);//获取ul里的所有子集
    console.log(menu.childNodes);//获取元素的子集节点(包含文本元素和符号)
</script>
//过滤子集节点
<script>
    for(var i=0;i<menu.childNodes.length;i++){
        console.log(menu.childNodes[i].nodeName);//获取节点名称
    }
    //nodeType是获取节点类别,标签的类型。nodeVaule是获取节点值,没有元素就是null,文本,符号,值
</script>
dom操作作用
.firstChild获取元素第一个子节点
.firstElementChild获取元素第一个子元素
.lastChild获取元素最后一个子节点
.lastElementChild获取元素最后一个子元素
.parentNode获取当前元素父节点
.parentElement获取当前元素父元素
.parentNode.nodeType获取当前元素父节点的类型
.parentElement.nodeType获取当前元素父元素的类型

创建DOM元素

	var ele=document.createElement("button");
    console.log(ele);//创建一个元素,在控制台打印
    //设置相关属性
    ele.innerText="按钮";//设置其上文本内容
    ele.className="btn";//设置类名称
    document.body.appendChild(ele);//将其追加到网页里当前元素之后
    console.log(ele.className);//直接属性获取元素的class
    console.log(ele.classList);//是获取元素的类的集合
    ele.classList.add("btninfo");//给元素添加类
    ele.classList.remove("btn");//移除类
    console.log(ele.classList.contains("btn"));//检测是否存在某个类,返回值是true  false
    ele.classList.length  //输出类个数
    ele.classList.toggle("btn",false);//类别的切换,第二个参数为true  添加,false  删除
</script>

DOM元素的事件

事件属于对象的被动行为,方法称为主动行为。

鼠标事件作用
mouseover鼠标悬停
mouseup鼠标抬起
mousedown鼠标按下
click单击鼠标
mouseleave鼠标移出目标元素
mouseout鼠标移开
mousemove鼠标移动
mouseenter鼠标进入目标元素
mousewheel鼠标滚动滚轮
键盘事件作用
keypress键盘按键一次,按下又上来
keydown键盘按下
keyup键盘抬起
表单事件作用
focus获焦
blur失焦
submit提交
change改变
input获取用户输入事件
浏览器事件作用
scroll滚动条
load加载完成
error加载失败
resize窗口大小变化
contentmenu右键打开浏览器菜单
剪贴版事件作用
cut剪贴
copy复制
paster粘贴
selectstart选择事件

事件的绑定方法

有三种:普通方式,动态绑定方式,监听的方式。
要注意的是,在js里写事件要全部在前面加on。
1、普通绑定
在元素上直接写事件,后面写方法调用。

<button onclick="btnhandle()">···</button>
<button id="btn">按钮</button>
<script>
    function btnhandle(){
        console.log(1);
    }
    //写成函数形式
    function fun(){
        var btn=document.getElementById("btn");
        btn.onclick=function (){
            console.log(btn);
        }
        btn=null;//手动回收
        fun();
</script>

2、动态绑定
获取dom元素再添加事件。要注意内存泄漏问题,删除元素后,把事件删掉,内存无法回收。

//单个事件绑定
<button id="btn">按钮</button>
<script>
	var btn=document.getElementById("btn");
	btn.onmousemove=function (){
	console.log("鼠标移动");

//多个元素动态绑定
<script>
//点击当前li  输出当前的元素
    var liele=document.getElementsByTagName("li");
    for(var i=0;i<liele.length;i++)
    {
        //用闭包来实现点击输出当前的i,点哪个输出哪个
       (function (n){
            liele[n].onclick=function (){
                console.log(n);
            }
        })(i);
</script>
//关联当前的i到当前对象的属性上
<script>
	liele[i].index=i;
        liele[i].onclick=function (){

            //事件里面的this指针指的是当前事件的执行对象
            console.log(this.index);//this指针是当前执行对象
        }
</script>

关于this
在js里写的全局变量和函数全属于window的属性,this指针直接指向window。还有构造函数中的this不属于window而属于js里的自定义对象。
js直接写this,函数的this,事件的this,构造函数的this,对象的this。
3、事件监听(不写on)
addeventlistener有三个参数,分别为事件类型,监听的函数,事件的冒泡和捕获。其中冒泡是由里向外执行,捕获是由外向里执行的,第三个参数只有两个值,true和false,true是捕获,false为冒泡。第三个参数不写时默认为冒泡。

<script>
btn.addEventListener("click",eventhandle);
    function eventhandle(){
        console.log("监听事件由里到外");
        this.removeEventListener("click",eventhandle);//事件监听移除
    };
</script>

处理冒泡事件三种方法
1、e.stopPropagation;阻止事件冒泡
2、return false;也阻止事件冒泡,是只在jQuery中使用
3、e.cancelBubble=true;设置为true 也可以阻止事件冒泡
处理事件默认行为

//禁止在浏览器上右键出现菜单
    window.oncontextmenu = function (e) {
        e.preventDefault();//阻止事件默认行为return false;
        或e.returnValue = false;
    }
//禁止用户页面选择
        document.onselectstart=function (e){
            return false;
        }
 //阻止用户复制
        document.oncopy=function (e){
            console.log(e);
            return false;
        }
    //用户复制的时候添加信息
    var sellection;
    document.oncopy = function () {
        //获取你选则的对象
        sellection = window.getSelection();
        var part = "<br/>--------------------------------------" +
                "<br/>此文转载来自:<a href='www.baidu.com'>*****博客<a/>" +
                "<br/>-------------------------------------";
        var div = document.createElement("div");//此处div是在控制台创建了一个div标签
        div.style = "posiation:absolute; z-index=-999; opacity:0;";
        div.innerHTML = sellection + part;
        document.body.appendChild(div);
        sellection.selectAllChildren(div);
//移除创建的元素
        setTimeout(function () {
            div.remove();
        }, 10);
    }

事件的执行参数(event)
一般在控制台中查看

参数含义
clientX,clientY鼠标点击的位置相对于浏览器的位置坐标
layerX,layerY鼠标点击的位置相对元素的偏移量
offsetX,offsetY鼠标点击的位置相对元素的偏移量
pageX,pageY鼠标点击的位置相对于浏览器的位置坐标
screenX,screenY鼠标点击的位置相对屏幕的坐标
return Value true/false当前事件执行成功后是否返回结果
src Element或target或to Element出发的目标元素
time stamp触发的时间,单位为ms
type触发事件类型
which或keycode值为ASCII码,鼠标事件
//判断滚轴是否上滑
window.onmousewheel=function(e){
	if(e.deltaY>0){
		鼠标上滑  
	}
	else···
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值