DOM学习笔记(部分)

基础名词

  • 文档:一个网页可以称为文档

  • 节点:网页中的所有内容都是节点(标签,属性,文本,注释等)

  • 元素:网页中的标签

  • 属性:标签的属性

api分类

对元素对象的增删改查

对元素属性的增删改查

对元素位置的获取

键盘事件与鼠标事件 事件监听 事件方法 事件对象 [点击,滚动,移入,输入,键入]

node(节点)基础分类

Node.ELEMENT_NODE:1 //标签 *
Node.ATTRIBUTE_NODE:2 //属性 *
Node.TEXT_NODE:3 //文本 *
Node.CDATA_SECTION_NODE:4 //子节点一定为TextNode
Node.ENTITY_REFERENCE_NODE:5
Node.ENTITY_NODE:6
Node.PROCESSING_INSTRUCTION_NODE:7 //命令节点
Node.COMMENT_NODE:8  //注释
Node.DOCUMENT_NODE:9  //最外层的Root element,包括所有其它节点 *
Node.DOCUMENT_TYPE_NODE:10  // DTD,<!DOCTYPE………..>
Node.DOCUMENT_FRAGMENT_NODE:11 //文档片段节点 
Node.NOTATION_NODE:12 //DTD中的Nation定义

Element类型

Element提供了对元素标签名,子节点和特性的访问,我们常用HTML元素比如div,span,a等标签就是element中的一种。Element有下面几条特性:(1)nodeType为1(2)nodeName为元素标签名,tagName也是返回标签名(3)nodeValue为null(4)parentNode可能是Document或Element(5)子节点可能是Element,Text,Comment,Processing_Instruction,CDATASection或EntityReference

Text类型

Text表示文本节点,它包含的是纯文本内容,不能包含html代码,但可以包含转义后的html代码。Text有下面的特性:(1)nodeType为3(2)nodeName为#text(3)nodeValue为文本内容(4)parentNode是一个Element(5)没有子节点

Attr类型

Attr类型表示元素的特性,相当于元素的attributes属性中的节点,它有下面的特性:(1)nodeType值为2(2)nodeName是特性的名称(3)nodeValue是属性的值(4)parentNode为null

Comment类型

Comment表示HTML文档中的注释,它有下面的几种特征:(1)nodeType为8(2)nodeName为#comment(3)nodeValue为注释的内容(4)parentNode可能是Document或Element(5)没有子节点

Document

Document表示文档,在浏览器中,document对象是HTMLDocument的一个实例,表示整个页面,它同时也是window对象的一个属性。Document有下面的特性:(1)nodeType为9(2)nodeName为#document(3)nodeValue为null(4)parentNode为null(5)子节点可能是一个DocumentType或Element

DocumentType

DocumentType表示文档的DTD声明,用于确定文档版本,确定对应的API集与属性解析规则:(1)nodeType为10(2)nodeName为#document-fragment(3)nodeValue为null(4)parentNode为null

DocumentFragment类型

DocumentFragment是所有节点中唯一一个没有对应标记的类型,它表示一种轻量级的文档,可能当作一个临时的仓库用来保存可能会添加到文档中的节点。DocumentFragment有下面的特性:(1)nodeType为11(2)nodeName为#document-fragment(3)nodeValue为null(4)parentNode为null

节点选择器

document.getElementById() ID

document.getElementByTagName() 标签名 //返回类数组

document.getElementByClassName() 类名 //返回类数组

//css选择器写法

document.querySelector() 单选择 只会选择符合条件的第一项 $() 在chorm控制台选择器的简写

document.querySelectorAll() //返回类数组 $$()

DOM 节点对象属性

element.title //设置或返回元素的title属性
element.textContent //设置或返回一个节点和它的文本内容
element.innerText //设置或返回一个节点和它的文本内容
element.tagName //作为一个字符串返回某个元素的标记名(大写)
element.className //获取标签的class属性值
​
nodelist.length //返回节点列表的节点数目。
nodelist.item(idx) //返回某个元素基于文档树的索引 同 nodelist[idx]

DOM API 获取标签属性

var oHeader = document.getElementById('header');
var aImg = document.getElementsByTagName('img');
​
console.log(oHeader.attributes); //节点属性对象 拥有长度属性
​
console.log(oHeader.id); //指定属性获取
​
console.log(aImg[0].src);//指定属性获取
​
console.log(aImg.getAttribute('src')); //通过 getAttribute方法获取实际 属性值
​
console.log(aImg.hasAttribute('src')); // 判断节点对象是否含有 某个 属性

DOM API 获取样式

获取标签样式只能是行内样式

setAttribute 针对标签属性

DOM API

获取元素运算后的样式

window.getComputedStyle(对象名,属性名)

IE8以下用currentStyle

//行内样式
console.log(oImg.style); //CSSOM对象
console.log(aImg.style.outline); //标签行内样式 style属性中存在的样式的值
​
//实际样式
console.log(window.getComputedStyle(oImg, null)['border']); //主流浏览器
console.log(oImg.currentStyle['border']); //老版本IE
​
//兼容函数写法
function getStyle(obj, attr) {
    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, false)[attr];
}

DOM API 获取节点内容

console.log(oHeader.innerHTML); //获取标签内的实际内容(包括标签)
​
 console.log(oHeader.innerText);  //设置标签中间的文本内容,应该使用innerText属性,谷歌火狐支持,ie8支持
 console.log(oHeader.textContent); //设置标签中间的文本内容,应该使用textContent属性,谷歌火狐支持,ie8不支持
​
​
//textContent 与 innerText兼容处理
function getInnerText(element) {
    if(typeof element.textContent=="undefined"){
        return element.innerText;
    }else{
        return element.textContent;
    }
}
​

DOM API 获取节点相关节点

console.log(oHeader.children); //获取子元素 只有标签 内容不行
console.log(oHeader.childNodes); //获取子节点 包含文本节点与标签节点
​
console.log(oHeader.firstChild); //获取第一个子节点(包含文本)  节点
console.log(oHeader.firstElementChild); //获取第一个子标签节点  标签
​
​
console.log(oHeader.lastChild); //获取最后一个子节点(包含文本)
console.log(oHeader.lastElementChild); //获取最后一个子标签节点
​
console.log(aP[0].parentElement); //父元素
console.log(aP[0].parentNode); //父节点
​
console.log(aP[1].nextElementSibling); //下一个兄弟标签节点
console.log(aP[1].nextSibling); //下一个兄弟节点(计算文本节点)
​
​
console.log(aP[2].previousElementSibling); //上一个兄弟标签节点
console.log(aP[2].previousSibling); //上一个兄弟节点(计算文本节点)
​

DOM API 创建与添加节点标签

var cP = document.createElement("p"); //创建标签节点
​
var content = document.createTextNode("你好"); //创建文本节点
​
cP.appendChild(content); //添加content到cP节点中
document.body.appendChild(cP); //添加cP到body标签中进行渲染
​
---------------------------------------
    
//通过文本标签方式添加节点   
var htmlTxt = '<p>哈哈哈</p>';
document.body.innerHTML += htmlTxt;
​
//HTML输出流 直接覆盖body中的内容
document.write('<p>123</p>'); 
​
----------------------------------------
//在父节点ELE里面的节点A前面添加 新的节点B
​
ELE.insertBefore(B,A);

DOM API 拷贝节点 插入元素

.cloneNode (true) /拷贝)

//cloneNode方法会对调用它的节点对象进行复制 传参true代表包括该节点的后代节点 不传参数表示只复制该节点本身

parent.insertBerfore(B,A) //在父节点parent 里面的节点A前面添加节点B

替换元素

parent.replaceChild(new,old);

new 如果是在页面已经存在的元素 会进行剪切复制 覆盖操作

node节点删除

removeChild 删除子元素 parent.removeChild(childEle)

你要删除的元素.remove() 直接删除

has 节点检测

document.hasFocus(); //返回布尔值,检测文档或元素是否获取焦点
element.hasChildNodes(); //返回布尔值,检测节点对象是否包含任何子节点
element.isEqualNode(element2); //返回布尔值,判断element与element2是否是同一个节点
element.hasAttributes(); //返回布尔值,判断当前节点对象是否包含属性
element.hasAttribute(property); //返回布尔值, 判断该节点是否拥有指定的 property 属性

回流与重绘

渲染顺序 位置 定位放前面

页面发生改动 每一次都要重新绘制

creatDomcumentFragment 文档片段 文档气泡 临时容器 可以往里面放任何东西

window.onload = function(){

把页面加载完后在运行js

e.type (触发事件类型)

函数开关写法

预设初始值

创建开关变量 进行if判断 判断开关变量 来改变事件变量

赋予变量数值

开关变量 var kaigaun = ture | kaiguan = !kaiguan(这一步让开关自己进行布尔转换)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值