進(jìn)入正題,開始學(xué)習(xí)JavaScript原生節(jié)點(diǎn)操作猜绣。
1.查找節(jié)點(diǎn)
獲取一般節(jié)點(diǎn)(當(dāng)然也可以獲取特殊關(guān)系節(jié)點(diǎn))
按id查找
document.getElementByID('patty')
;
按class名查找
document.getElementsByClassName('patty')
;
按標(biāo)簽名查找
document.getElementsByTagName('patty')
;
統(tǒng)一查找
document.querySelector('#id')
;
document.querySelectorAll('#id div')
;
獲取特殊關(guān)系節(jié)點(diǎn)
獲取父節(jié)點(diǎn)
document.getElementByID('patty').parentNode
;
獲取元素子節(jié)點(diǎn)
/*childNodes會(huì)返回指定元素的所有種類節(jié)點(diǎn)
children只返回指定元素的元素節(jié)點(diǎn)轧简,ie下包括注釋節(jié)點(diǎn)
*/
var getChildNodes=function(ele){
var childArr=ele.children || ele.childNodes;
children=new Array();
for(var i=0;i<childArr.length;i++){
if(childArr[i].nodeType==1){
children.push(childArr[i]);
}
}
};
獲取上一個(gè)兄弟節(jié)點(diǎn)
/*nextSibling,previousSibling都會(huì)將空格或者換行當(dāng)做節(jié)點(diǎn)處理
nextElementSibling,priviousElementSibling 直接返回元素節(jié)點(diǎn)
*/
function getPreviousElementSibling(ele) {
if(ele.previousElementSibling) {
return ele.previousElementSibling;
} else {
do {
ele= ele.previousSibling;
} while ( ele && ele.nodeType !== 1 );
return ele;
}
} ;
getPreviousElementSibling(document.getElementById('patty'));
獲取下一個(gè)兄弟節(jié)點(diǎn)與獲取上一個(gè)兄弟節(jié)點(diǎn)類似
getNextElementSibling(ele)
獲取第一個(gè)和最后一個(gè)兄弟節(jié)點(diǎn)
/*firstChild,lastChild都會(huì)將空格或者換行當(dāng)做節(jié)點(diǎn)處理
firstElementChild,lastElementChild 直接返回元素節(jié)點(diǎn)
這里只列舉第一個(gè)孩子
*/
function getFirstElementChild(ele) {
if(ele.firstElementChild) {
return ele.firstElementChild;
} else {
do {
ele=getNextElementSibling(ele) ;
} while ( ele && ele.nodeType !== 1 );
return ele;
}
} 久又;
2.插入節(jié)點(diǎn)
JS提供appendChild(),insertBefore()兩個(gè)方法插入節(jié)點(diǎn)
插入新的子節(jié)點(diǎn)
var span = document.createElement('span');
document.querySelector('div').appendChild(span);
在指定節(jié)點(diǎn)前插入子節(jié)點(diǎn)
var patty = document.getElementById('patty');
var span = document.createElement('span');
patty.parentNode.insertBefore(span, patty);
/*更簡(jiǎn)單的*/
patty.insertAdjacentHTML('beforeBegin', '<span></span>');
在指定節(jié)點(diǎn)后插入子節(jié)點(diǎn)
function insertAfter(ele, newNode){
if(ele.nextElementSibling) {
ele.parentNode.insertBefore(newNode, ele.nextElementSibling);
} else {
ele.parentNode.appendChild(newNode);
}
}
var patty = document.getElementById('patty');
var span = document.createElement('span');
insertAfter(patty, span);
/*更簡(jiǎn)單的*/
patty.insertAdjacentHTML('afterEnd', '<span></span>');
3.刪除節(jié)點(diǎn)
JS只提供removeChild()刪除節(jié)點(diǎn)
var patty= document.getElementById('patty');
patty.parentNode.removeChild(patty);
4.清空節(jié)點(diǎn)
var patty= document.getElementById('patty');
patty.innerHTML=' ';
5.判斷節(jié)點(diǎn)是否存在
document.getElementById('patty')!==null;
document.querySelectorAll(''div).length>0;
6.遍歷節(jié)點(diǎn)
/*IE的數(shù)組類型沒(méi)有forEach函數(shù)
array.forEach(function(currentValue, index, arr), thisValue)
*/
function forEach(elems, callback) {
if([].forEach) {
[].forEach.call(elems, callback);
} else {
for(var i = 0; i < elems.length; i++) {
callback(elems[i], i); }
}
}
var div = document.querySelectorAll('div');
forEach(div, function(elem, i){
});
7.復(fù)制節(jié)點(diǎn)
document.getElementById('patty').cloneNode(true);
8.獲壬访!/設(shè)置節(jié)點(diǎn)的內(nèi)容
獲取/設(shè)置節(jié)點(diǎn)內(nèi)的內(nèi)容
/*獲取*/
document.querySelecotr('div').innerHTML
var div= document.querySelector('div');
div.textContent || div.innerText;
/*設(shè)置*/
document.querySelecotr('div').innerHTML = '<span>abc</span>';
document.querySelecotr('div').textContent = 'abc'
獲绒痔摺/設(shè)置包含節(jié)點(diǎn)本身的內(nèi)容
/*獲取*/
document.getElementById('patty').outerHTML
/*設(shè)置*/
document.getElementById('patty').outerHTML="<div>pattyzzh</div>";
獲冉烹埂/設(shè)置表單的內(nèi)容
/*獲取*/
document.querySelector('input').value;
/*設(shè)置*/
document.querySelector('input').value="pattyzzh";
9.屬性操作
判斷是否設(shè)置屬性
document.getElementById('pattyzzh').hasAttribute('class');
獲取屬性
document.getElementById('pattyzzh').getAttribute('class');
刪除屬性
document.getElementById('pattyzzh').removeAttribute('class');
設(shè)置屬性
document.getElementById('pattyzzh').setAttribute('class',‘patty’);
10.CSS樣式操作
/*設(shè)置樣式*/
document.getElementById('pattyzzh').style.color = '#e4e4e4';
/*獲取樣式
萬(wàn)惡的ie只支持currentStyle
*/
var getStyle = function(dom, attr) {
return dom.currentStyle ? dom.currentStyle[attr] : getComputedStyle(dom, false)[attr];
};
getStyle(document.getElementById('pattyzzh'), 'color');
/*獲取偽類的樣式(ie不支持)*/
window.getComputedStyle(el , ":after")[attrName];
11.Class操作
新增類
function addClass(elem, className) {
if(elem.classList) {
elem.classList.add(className);
} else {
elem.className += ' ' + className;
}
}
addClass(document.getElementById('test'), 'a');
刪除類
function removeClass(ele, className) {
if(ele.classList) {
ele.classList.remove(className);
} else {
ele.className = ele.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}
removeClass(document.getElementById('pattyzzh'), 'patty');
判斷是否包含類
function hasClass(ele, className) {
if(ele.classList) {
return ele.classList.contains(className);
} else {
return new RegExp('(^| )' + className + '( |$)', 'gi').test(ele.className);
}
}
hasClass(document.getElementById('pattyzzh'), 'patty');
12.字符串操作
/*去除空格*/
function trim(str){
if(str.trim) {
return str.trim();
} else {
return str.replace(/^\s+|\s+$/g, '');
}
}
trim(' pattyzzh ');
/*JSON序列化*/
JSON.stringify({name: "pattyzzh"})
/*JSON反序列化*/
JSON.parse('{ "name": "pattyzzh" }')
好了巢墅,第一部分先寫這么多诸狭,下次見!君纫!