原生JS实现几个常用DOM操作API实例
原生实现jQuery的sibling方法
<body>
<span>我是span标签</span>
<div>我是一个div</div>
<h1id="h1">我是标题</h1>
<p>我是一个段落</p>
<scripttype="text/javascript">
//获取元素的兄弟节点
functionsiblings(o){//参数o就是想取谁的兄弟节点,就把那个元素传进去
vara=[];//定义一个数组,用来存储o的兄弟元素
//previousSibling返回位于相同节点树层级的前一个元素
varp=o.previousSibling;
while(p){//先取o的前面的兄弟元素判断有没有上一个兄弟元素,如果有则往下执行,p表示previousSibling
if(p.nodeType===1){
a.push(p);
}
p=p.previousSibling//最后把上一个节点赋给p
}
a.reverse();//把顺序反转一下,这样元素的顺序就是按先后的了
//nextSibling返回位于相同节点树层级的下一个节点
varn=o.nextSibling;//再取o下面的兄弟元素
while(n){//判断有没有下一个兄弟结点,n是nextSibling的意思
if(n.nodeType===1){//判断是否是元素节点
a.push(n);
}
n=n.nextSibling;
}
returna//最后按从老大到老小的顺序,把这一组元素返回
}
varoH=document.getElementById("h1");
console.log(siblings(oH));//[span,div,p,script]
</script>
</body>
原生实现jQuery的class选择器
//用数组模拟jQuery的class选择器
functiongetClassName(ParentId,NewClassName){
varAllClassElem=ParentId.getElementsByTagName(“*”);
varAllClass=[];
vari=0;
for(vari=0;i<AllClassElem.length;i++){
if(AllClassElem[i].className==NewClassName){
AllClass.push(AllClassElem[i]);
}
}
returnAllClass;
}
//用法:
varPElementId=document.getElementById("bar");
varbuttons=getClassName(PElementId,"sco");
//取id="bar"下class="sco"的元素;
getElementsByClassName()
/**
*获取指定类名的元素对象集合
*@param{Object}node父节点
*@param{String}classname指定类名
*@return{[Object]}目标对象集合
*/
functiongetElementsByClassName(node,classname){
//如果浏览器支持则直接使用
if(node.getElementsByClassName){
returnnode.getElementsByClassName(classname);
}else{
return(functiongetElementsByClass(searchClass,node){
if(node==null)
node=document;
varclassElements=[],
els=node.getElementsByTagName("*"),
elsLen=els.length,
pattern=newRegExp("(^|\\s)"+searchClass+"(\\s|$)"),i,j;
for(i=0,j=0;i<elsLen;i++){
if(pattern.test(els[i].className)){
classElements[j]=els[i];
j++;
}
}
returnclassElements;
})(classname,node);
}
}
addLoadEvent()
/**
*方便的将在文档加载后运行的函数添加到window.onload中
*@param{function}func待运行函数
*/
functionaddLoadEvent(func){
varoldOnload=window.onload;
//typeof返回String类型
if(typeofwindow.onload!='function'){
window.onload=func;
}else{
window.onload=function(){
oldOnload();
func();
}
}
}
addClass()
/**
*为指定元素结点添加新类名
*element元素结点
*value类名
*/
functionaddClass(element,value){
//如果元素类名为空,直接将value赋值给相应的元素类名
if(!element.className){
element.className=value;
}else{
//否则需要将类名之间用空格隔开
newClassName=element.className;
//多个类名间添加空格
newClassName+='';
newClassName+=value;
element.className=newClassName;
}
}
insertAfter()
/**
*在目标元素结点后面插入新的元素结点
*newElement待插入的新元素结点
*targetElement目标元素结点
*/
functioninsertAfter(newElement,targetElement){
varparent=targetElement.parentNode;
if(parent.lastChild==targetElement){
parent.appendChild(newElement);
}else{
parent.insertBefore(newElement,targetElement.nextSibling);
}
}
getNextElement()
/**
*获取下一个元素结点
*@param{Object}node兄结点
*@return{Object||null}下一个元素结点或未获取到
*/
functiongetNextElement(node){
varsibNode=node.nextSibling;
if(sibNode.nodeType==1){
returnnode;
}
if(sibNode.nextSibling){
//递归调用
returngetNextElement(node.nextSibling);
}
returnnull;
}
以上这篇原生JS实现几个常用DOM操作API实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。