DOM

DOM 是这样规定的:
整个文档是一个文档节点
每个 XML 标签是一个元素节点
包含在 XML 元素中的文本是文本节点
每一个 XML 属性是一个属性节点
注释属于注释节点
nodeType
元素 1
属性 2
文本 3
注释 8
文档 9

元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document

元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值

attributes
parentNode
childNodes
firstChild
lastChild
nextSibling
previousSibling

1、节点操作

document.doctype
document.documentElement
document.head
document.title
document.body
document.getElementById('idname')
document.querySelector('div')

2、节点列表操作

document.getElementsByClassName('className')
document.getElementsByTagName('tagName')
document.getElementsByTagNameNS(namespace, name) 
document.getElementsByName('tagName')
document.querySelectorAll('tagName')
document.scripts
document.embeds
document.forms
document.links
document.images

3、class操作

el.classList.add(className)
el.classList.remove(className)
el.classList.contains(className)
el.classList.toggle(className)

4、节点操作
创建节点

var el = document.createElement('tagName')

克隆节点

el.cloneNode(true)//要其子节点
//默认为false,不要其子节点

添加一个节点

parent.appendChild(el)
//在指定节点前添加节点
parent.insertBefore(el, parent.childNodes[1])
//节点前插入
el.insertAdjacentHTML('beforeBegin',htmlString)
//节点中,第一个子节点前插入
el.insertAdjacentHTML('afterBegin',htmlString)
//节点后插入
el.insertAdjacentHTML('afterEnd',htmlString)
//节点中,最后一个节点后插入
el.insertAdjacentHTML('beforeEnd',htmlString)

节点父节点

el.parentNode

子节点

el.firstChild//第一个子节点
el.lastChild//最后一个子节点
el.children//所有的子节点,返回数组

相邻节点

el.previousSibling
el.previousElementSibling//前一个元素节点
el.nextSibling
el.nextElementSibling

删除节点

el.parentNode.removeChild(el);
 removeAttribute()
 removeAttributeNode()

5、属性

el.addAttribute('name','value')
el.getAttribute('name')
getAttributeNode()

6、 内容的设置

el.innerHTML
el.outerHTML//包括括节点自身
el.innerText
el.textContent//获得值含有空格

7、样式
获取样式

window.getComputedStyle(el, '')['font-size']
window.getComputedStyle(el, ':after')
//ie8
window.currentStyle(el)

设置样式
el.style.fontSize = ‘16px’
8、位置设置

// getBoundingClientRect返回一个对象,包含top,left,right,bottom,width,height
// width、height 元素自身宽高
// top 元素上外边界距窗口最上面的距离
// right 元素右外边界距窗口最上面的距离
// bottom 元素下外边界距窗口最上面的距离
// left 元素左外边界距窗口最上面的距离
// width 元素自身宽(包含border,padding) 
// height 元素自身高(包含border,padding) 

// 元素在页面上的偏移量
var rect = el.getBoundingClientRect()
return {
  top: rect.top + document.body.scrollTop,
  left: rect.left + document.body.scrollLeft
}

// 元素自身宽(包含border,padding) 
el.offsetWidth
// 元素自身高(包含border,padding) 
el.offsetHeight
// 元素的左外边框至包含元素的左内边框之间的像素距离
el.offsetLeft
// 元素的上外边框至包含元素的上内边框之间的像素距离
el.offsetTop 
//通常认为 <html> 元素是在 Web 浏览器的视口中滚动的元素(IE6 之前版本运行在混杂模式下时是 <body> 元素) 
//因此,带有垂直滚动条的页面总高度就是 document.documentElement.scrollHeight
// 在没有滚动条的情况下,元素内容的总高度
scrollHeight
// 在没有滚动条的情况下,元素内容的总宽度
scrollWidth
// 被隐藏在内容区域左侧的像素数。通过设置这个属性可以改变元素的滚动位置
scrollLeft
// 被隐藏在内容区域上方的像素数。通过设置这个属性可以改变元素的滚动位置
scrollTop

// 视口大小
// ie9+
var pageWidth = window.innerWidth,
    pageHeight = window.innerHeight;
if (typeof pageWidth != "number"){ 
  // ie8
  if (document.compatMode == "CSS1Compat"){
    pageWidth = document.documentElement.clientWidth;
    pageHeight = document.documentElement.clientHeight;
  } else { 
    // ie6混杂模式
    pageWidth = document.body.clientWidth;
    pageHeight = document.body.clientHeight;
  }
}

9、事件

// 绑定事件
// ie9+
el.addEventListener(eventName, handler , Booleans); // Booleans默认false(事件在冒泡阶段执行),true(事件在捕获阶段执行)
// ie8
el.attachEvent('on' + eventName, function(){
  handler.call(el);
});

// 移除事件
// ie9+
el.removeEventListener(eventName, handler); 
// ie8
el.detachEvent('on' + eventName, handler);

// 事件触发
if (document.createEvent) {
  // ie9+
  var event = document.createEvent('HTMLEvents');
  event.initEvent('change', true, false);
  el.dispatchEvent(event);
} else {
  // ie8
  el.fireEvent('onchange');
}

// event对象
var event = window.event||event;

// 事件的目标节点
var target = event.target || event.srcElement;

// 事件代理
ul.addEventListener('click', function(event) {
  if (event.target.tagName.toLowerCase() === 'li') {
    console.log(event.target.innerHTML)
  }
});

10、加载

function ready(fn) {
  if (document.readyState != 'loading'){
    // ie9+
    document.addEventListener('DOMContentLoaded', fn);
  } else {
    // ie8
    document.attachEvent('onreadystatechange', function() {
      if (document.readyState != 'loading'){
        fn();
      }
    });
  }
}

11、去掉空格

// ie8
string.replace(/^\s+|\s+$/g, '');
// ie9+
string.trim();

12、绑定上下文

// ie8
fn.apply(context, arguments);
// ie9+
fn.bind(context);

13、ajax

// GET
var request = new XMLHttpRequest();
request.open('GET', 'user.php?fname=Bill&lname=Gates', true); // false(同步)
request.send();

// ie8
request.onreadystatechange = function() {
  if (this.readyState === 4) {
    if (this.status >= 200 && this.status < 400) {
      // Success!
      var data = JSON.parse(this.responseText);
    } else {
      // 错误
    }
  }
};

// ie9+
request.onload = function() {
  if (request.status >= 200 && request.status < 400) {
    // Success!
    var data = JSON.parse(request.responseText);
  } else {
    // 服务器返回出错
  }
};
request.onerror = function() {
  // 连接错误
};

// POST
var request = new XMLHttpRequest(); 
request.open('POST', 'user.php', true); // false(同步)
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send(dataString);

14、json处理

JSON.parse(string);
JSON.String(Object)

15、遍历节点

function forEach( nodeList, callback ) {
  if(Array.prototype.forEach){
    // ie9+
    Array.prototype.forEach.call( nodeList, callback );
  }else {
    // ie8
    for (var i = 0; i < nodeList.length; i++){
      callback(nodeList[i], i);
    }
  }
}

forEach(document.querySelectorAll(selector),function(el, i){

})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值