DOM以及DOM的基本操作

DOM以及一些基本操作

DOM简介:

Document Object Model文档对象模型

1.文档:document

一个网页就是一个文档

2.对象:Object

对象:网页中的每一个部分都转换成了对象

3.模型:Model

使用模型来表示对象之间的关系,这样方便我们获取对象
模型能很清楚的显示节点与节点之间的关系。

Node

节点是构成我们网页最基本组成部分,网页中的每一个部分都可以称为一个节点。
eg:html标签、属性、文本、注释、整个文档等都是一个节点。虽然都是节点,但实际上他们的具体类型不同,节点的类型不同,属性和方法也不尽相同。

节点的分类

1.文档节点:整个HTML文档。
2.元素节点:HTML文档中的HTML标签。
3.属性节点:元素的属性。
4.文本节点:HTML标签中的文本内容,包括空格回车等。

节点的属性
1.文档节点

nodeName :#document
nodeType:9
nodeValue:null

2.元素节点

nodeName :标签名
nodeType:1
nodeValue:null

3.属性节点

nodeName :属性名
nodeType:2
nodeValue:属性值

4.文本节点

nodeName : #text
nodeType:3
nodeValue:文本内容

事件

就是文档或浏览器窗口发生的一些特定的交互瞬间 JavaScript与HTML之间是通过事件实现交互的。
对于web应用来说,有下面这些代表性的事件,点击某个元素、将鼠标移动至某个元素上方、按下键盘上的某个键,等等。
可以为按钮对应事件绑定处理函数的形式来响应事件,当事件触发时其对应的函数将会被调用。
如下面的代码,绑定一个单击事件:

btn.onclick = function(){
        alert('点点点')
    };

像这种单击事件绑定的函数,称为单击响应函数。

DOM的基本操作

对节点的增删改查。

一、查看元素节点

注意:选择出的元素是类数组

1.getElementById(’’)

通过ID选出元素,如果没有id,name值为only也可以选择出来。

 var div = document.getElementById('only')
2.getElementsByTagName(’’)[0]

通过标签名来选择 需要加一个[索引值] 兼容性很好。

var div = document.getElementsByTagName('div')[0];
3.getElementsByClassName(’’)[0]

通过类名选择元素,但是存在兼容性问题,不能兼容ie9以下的版本。

var div = document.getElementsByClassName('div')[0];
4.getElementsByName(’’)[0]

通过name值选择元素 注意:只有部分标签name可生效(表单、表单元素、img、iframe)。

 var div = document.getElementsByName('div')[0];
在这里要提醒大家注意的是,在日常程序的编写中,尽量不要用Id选择器,在调试的时候容易出现问题。
css选择器
1. getComputedStyle(元素对象,null)

获取所有样式
参一:元素对象
参二:是否获取伪元素 null 表示不获取

注意:仅支持谷歌获取,不支持低版本ie(ie8以下)

解决低版本ie兼容性问题:currentStyle

<div class="wrap" style="border-radius: 50%;"></div>
 <style>
        .wrap{
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
var wrap = document.getElementsByClassName('wrap')[0];
var res = getComputedStyle(wrap,null);
console.log(res.width);
// 样式兼容性问题
function getStyle(el){
    if(el.currentStyle){
        return el.currentStyle;
    }else{
        return getElementsByClassName(el,null);
    }
}
    
2.document.querySelector()
var div = document.querySelector('div>span strong');
3.document.querySelectorAll()
var div = document.querySelectorAll('div>span strong')
二、节点的获取方法
1.遍历dom树
(1)strong.parentNode

父节点
最顶端的parentNode是document,元素只有一个父节点。

(2)childNodes

子节点们
即使文本节点为空,也会计算上。

(3)firstChild

第一个子节点
一个分支中的第一个节点。

(4)lastChild

最后一个子节点

(5)nextSibling

最后一个兄弟节点

(6)previousSibling

前一个兄弟节点

2.基于元素节点树的遍历
(1)parentElement

返回当前父元素节点(IE不兼容)

(2)children

只返回当前的元素子节点

(3)firstElementChild

返回第一个元素节点(IE不兼容)

(4)lastElementChild

返回第一个元素节点(IE不兼容)

(5)nextElementSibling

返回后一个兄弟元素节点

(6)previousElementSibling

返回前一个兄弟元素节点

三、节点的四个属性
1.nodeName

元素的标签名,以大写的形式表示,只读。

2.nodeValue

text节点或者Comment节点的文本内容,可读写。

3.nodeType

获取该节点的类型,只读(很重要!!!)

4.attributes

Element节点的属性集合

四、节点的方法
Node.hasChildNode()

查看该元素中是否有节点(空格回车等都是文本节点)

1.appendChild(参数)

向元素里增加子元素的方法,可以累加。
语法:父元素.appendChild(子元素)。

2.createElement()
通过js的方式新建标签
var node = document.createElement('p');
node.innerHTML = 'wyh is a pig';
console.log(node);
// 获取wrap 通过css选择器
var wrap = document.querySelector('.wrap');
console.log(wrap);
1.innerHTML

重新赋值,获取的自身元素下的所有内容,包括标签。

box.innerHTML = 'hello';
console.log(content.innerHTML = '1234&nbsp; &nbsp; &nbsp;56<h1>hhhh</h1>');
//修改时, 可以自动解析赋值中的标签以及特殊字符(&nbsp;) 
2.innerTEXT

获取本身和所有的后代元素的文本内容。

console.log(content.innerText = '1234&nbsp; &nbsp; &nbsp;56<h1>hhhh</h1>');
// 修改时,不解析赋值的内容,包括标签 包括(&nbsp);
1.removeChild(child)

语法:父元素.removeChild(子元素)。
作用:删除父元素下的某个子元素。

  btn.onclick = function(){
        wrap.removeChild(p)
    }
2.remove()

删除元素自身。

 var h1 = document.getElementsByTagName('h1')[0];
 h1.onclick = function(){
      h1.remove();
 }

列表删除

// 获取按钮
    var btns = document.querySelectorAll('li>button');
    // 遍历button按钮
    for(var i = 0;i<btns.length;i++){
        (function(){
            var x = i;
            btns[x].onclick = function(){
                // 点击删除li,根据btn[x]获取父节点li
                var parent = btns[x].parentNode;
                // 删除父节点li
                parent.remove();
            }
        })();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值