DOM2

2017-08-07  本文已影响0人  flyingtoparis

选择符API

querySelector()

var body = document.querySelector("body");
var myDiv = document.querySelector("#myDiv");

// 类为selected的第一个元素
var selected = document.querySelector(".selected");

// 类为button的第一个img元素
var img = document.querySelector("img.button");  

querySelectorAll()

var strongs = document.querySelectorAll("p strong");
var i ,len,strong;
for (var i = 0; len = strongs.lenght ; i < len; i ++){
    strong = strongs[i];
    strong.className = 'important';
}

matchesSelector()

function matchesSelector(ele,selector){
    if(ele.matchesSelector){
        return ele.matchesSelector(selector);
    }else if (ele.msMatchesSelector){
        return ele.msMathcesSelector(selector);
    }else if (ele.mozMatchesSelector){
        return ele.mozMatchesSelector(selector);
    }else if (ele.webkitMatchesSelector){
        return ele.webkitMatchesSelector(selector);
    }else{
        throw new Error('not supported')
    }
}

if (matchesSelector(document.body,'.box')){
    //
}

元素遍历

HTML5

与类相关的扩充

getElementsByClassName()
// 获取类名为red,box的元素,顺序无所谓
var aRedBox = document.getElementsByClassName("red box");

var aRed = document.getElementsByClassName("red");

classList属性
var classNames = div.className.split(/\s+/);
var pos = -1,
    i,
    len;
for ( i = 0; len = classNames.lenght; i < len; i ++){
    if (classNames[i] == "user"){
        pos = i;
        break;
    }
}
classNames.splice(i,1);
div.className = classNames.join(' ');
div.classList.remove('red');   // 删除red的类
div.classList.add('red');     //新增类
div.classList.toggle('red')    // 类的切换
div.classList.contains('red');     // 存在返回true,不存在返回false

焦点管理

var button = document.getElementById('button');
button.focus();     // 获得焦点
console.log(document.activeElement == button);   // true
var button = document.getElementById('myButton');
button.focus();
console.log(document.hasFocus());   // true

HTMLDocument 变化

readyState 属性
window.onload = function(){
     if (document.readyState == 'complete'){
            alert('afklsdf')
        }
    }
head属性
var head = document.head || document.getElementsByTagName('head')[0];

自定义数据属性

<div data-appId='123'>ksdk</div>

//js中的读取,设置
var oDiv = document.getElementsByTagName('div')[0];

//得到值
var AppID = oDiv.dataset.appId;

//设置值
oDiv.dataset.appId = '456';

if ( oDiv.dataset.myName){
    ....
}


//可以创建一个赋值
document.onclick = function(){
    oBox.dataset.name = 'dan';
}

插入标记

innerHTML 属性
outerHTML 属性
<div id='box'>
    11111
</div>

var oBox = document.getElementById('box');
oBox.outerHTML = '<p>6666</p>'

//上面的代码与下面一样
var p = document.createElement('p');
p.appendChild(document.createTextNode('666'));
div.parentNode.replaceChild(p,div);
insertAdjacentHTML() 方法
oP.insertAdjacentHTML("beforebegin","<p>hello world</p>")  // 作为前一个同辈元素插入

oP.insertAdjacentHTML("afterbegin","<p>作为第一个子元素插入</p>")  // 作为第一个子元素插入

oP.insertAdjacentHTML("beforeend","<p>作为最后一个元素插入</p>")   // 作为最后一个子元素插入

oP.insertAdjacentHTML("afterend","<p>作为后一个同辈元素插入</p>")  // 作为后一个同辈元素插入
内存与性能问题

contains方法

console.log(a.contains(b));  // true  , false

compareDocumentPosition()

掩码 节点关系
1 无关
2 居前(指定节点在参考节点之前)
4 居后(指定节点在参考节点之后)
8 包含(给定节点是参考节点的祖先)
16 被包含(给定节点是参考节点的后代)
function contains(refNode, otherNode){  
    if (typeof refNode.contains == "function" &&  
    (!client.engine.webkit || client.engine.webkit >= 522)){  // 检测当前浏览器所用的webkit的版本号
    return refNode.contains(otherNode);  
    } else if (typeof refNode.compareDocumentPosition == "function"){  
    return !!(refNode.compareDocumentPosition(otherNode) & 16);  
    } else {  
    var node = otherNode.parentNode;  
    do {  
    if (node === refNode){  
    return true;  
    } else {  
    node = node.parentNode;  
    }  
    } while (node !== null);  
    return false;  
    }  
}  
上一篇 下一篇

猜你喜欢

热点阅读