您好,欢迎访问一九零五行业门户网

javascript动态创建dom元素完整代码和使用详解

通过点击某个元素后, 动态创建一个dom元素并显示,在此记录:
/**//* 动态创建dom元素的相关函数支持 */ /**//* 获取以某个元素的dom对象 @obj 该元素的id字符串 */ function getelement(obj) { return typeof obj=='string'?document.getelementbyid(obj):obj; } /**//* 获取某个元素的位置 @obj 该元素的dom对象,或该元素的id */ function getobjectposition(obj) { obj=typeof obj==='string'?getelement(obj):obj; if(!obj) { return; } var position=''; if(obj.getboundingclientrect) //for ies { position=obj.getboundingclientrect(); return {x:position.left,y:position.top}; } else if(document.getboxobjectfor) { position=document.getboxobjectfor(obj); return {x:position.x,y:position.y}; } else { position={x:obj.offsetleft,y:obj.offsettop}; var parent=obj.offsetparent; while(parent) { position.x+=obj.offsetleft; position.y+=obj.offsettop; parent=obj.offsetparent; } return position; } } /**//* 为某个dom对象动态绑定事件 @otarget 被绑定事件的dom对象 @seventtype 被绑定的事件名,注意,不加on的事件名,如 'click' @fnhandler 被绑定的事件处理函数 */ function addeventhandler(otarget, seventtype, fnhandler) { if (otarget.addeventlistener) { otarget.addeventlistener(seventtype, fnhandler, false); } else if (otarget.attachevent) //for ies { otarget.attachevent("on" + seventtype, fnhandler); } else { otarget["on" + seventtype] = fnhandler; } } /**//* 从某个dom对象中去除某个事件 @otarget 被绑定事件的dom对象 @seventtype 被绑定的事件名,注意,不加on的事件名,如 'click' @fnhandler 被绑定的事件处理函数 */ function removeeventhandler(otarget,seventtype,fnhandler) { if(otarget.removeeventlistener) { otarget.removeeventlistener(seventtype,fnhandler,false) } else if(otarget.detachevent) //for ies { otarget.detachevent(seventtype,fnhandler); } else { otarget['on'+seventtype]=undefined; } } /**//* 创建动态的dom对象 @domparams是被创建对象的属性的json表达,它具有如下属性: @parentnode 被创建对象所属的父级元素(可为元素id,也可为dom对象) @domid 被创建对象的id @domtag 被创建对象的tag名称,支持常用的布局元素,如p span等,但不支持input\form等特别的元素 @content 被创建的对象内容 @otherattributes 为被创建的对象添加除函数必需的属性外其它属性,如[{attrname:'style.color',attrvalue:'red'}] @eventregisters 为被创建的对象添加事件,类似[{eventtype:'click',eventhandler:adsfasdf}]的数组 -经过组合后,该参数具有如下形式: {parentnode:document.body,domtag:'p',content:'这是测试的',otherattributes:[{attrname:'style.color',attrvalue:'red'}],eventregisters:[{eventtype:'click',eventhandler:fnhandler}]} */ function dyncreatedomobject(domparams) { if(getelement(domparams.domid)) { childnodeaction('remove',domparams.parentnode,domparams.domid); } var dynobj=document.createelement(domparams.domtag); with(dynobj) { //id也可以通过otherattributes传入,但是出于id的特殊性,此处仍然采用 //json对象传入,并以dom id属性附件 id=domparams.domid; innerhtml=domparams.content; //innerhtml是dom属性,而id等是元素属性,注意区别 } /**//*添加属性*/ if(null!=domparams.otherattributes) { for(var i=0;i<domparams.otherattributes.length;i++) { var otherattribute =domparams.otherattributes[i]; dynobj.setattribute(otherattribute.attrname,otherattribute.attrvalue); } } /**//*end 添加属性*/ /**//*添加相关事件*/ if(null!=domparams.eventregisters) { for(var i=0;i<domparams.eventregisters.length;i++) { var eventregister =domparams.eventregisters[i]; addeventhandler(dynobj,eventregister.eventtype,eventregister.eventhandler); } } /**//*end 添加相关事件*/ try { childnodeaction('append',domparams.parentnode,dynobj); } catch($e) { } return dynobj; } /**//* 从父结点中删除子结点 @actiontype 默认为append,输入字符串 append | remove @parentnode 父结点的dom对象,或者父结点的id @childnode 被删除子结点的dom对象 或者被删除子结点的id */ function childnodeaction(actiontype,parentnode,childnode) { if(!parentnode) {return; } parentnode=typeof parentnode==='string'?getelement(parentnode):parentnode; childnode=typeof childnode==='string'?getelement(childnode):childnode; if(!parentnode || !childnode) {return;} var action=actiontype.tolowercase(); if( null==actiontype || action.length<=0 || action=='append') { action='parentnode.appendchild'; } else { action='parentnode.removechild'; } try { eval(action)(childnode); } catch($e) { alert($e.message); } }
使用示例:
var htmlattributes= [ {attrname:'class',attrvalue:'样式名称'} //for ies , {attrname:'classname',attrvalue: '样式名称'} //for ff ] var domparams={domtag:'p', content:'动态p的innerhtml', otherattributes:htmlattributes}; var newhtmldom=dyncreatedomobject(domparams); //通过setattribute('style','position:absolute.....................') //的形式来指定style没有效果,只能通过如下形式,jiong newhtmldom.style.zindex='8888'; newhtmldom.style.position='absolute'; newhtmldom.style.left='100px'; newhtmldom.style.top='200px';
以上就是javascript动态创建dom元素完整代码和使用详解的详细内容。
其它类似信息

推荐信息