JavaScript 就地编辑HTML节点实现代码
点击编辑当前内容
var EditField={
configure:function(id){
this.id=id;
this.createElements(); //动态生成编辑输入框
this.toScan(); //初始化动态生成的输入框和按钮、待编辑的DOM元素的display属性
this.addEvents(); //给相关的DOM元素添加事件监听器
},
events:function(elem,type,fn){ //用于添加事件的通用函数
if(elem.attachEvent){
elem.attachEvent("on"+type,fn);
}else if(elem.addEventListener){
elem.addEventListener(type,fn,false);
}else{
elem["on"+type]=fn;
}
return elem;
},
addEvents:function(){ //添加事件
var that=this;
this.events(this.btnSubmit,"click",function(){
that.save();
});
this.events(this.btnCancel,"click",function(){
that.cancel();
});
this.events(document.getElementById(this.id),"click",function(){
that.toEdit();
});
},
insertAfter:function(newNode,referenceNode){ //将动态生成的输入框和按钮插入到待编辑元素的后面
if (referenceNode.nextSibling) {
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}else{
var p=referenceNode.parentNode || document.body;
p.appendChild(newNode);
}
},
createElements:function(){ //动态生成输入框和按钮
this.divContainer=document.createElement("div");
//this.parentElement.appendChild(this.divContainer);
this.insertAfter(this.divContainer,document.getElementById(this.id));
this.input=document.createElement("input");
this.input.type="text";
this.input.value=document.getElementById(this.id).innerHTML; //初始化值
this.divContainer.appendChild(this.input);
this.btnSubmit=document.createElement("input");
this.btnSubmit.value="Submit";
this.btnSubmit.type="button";
this.divContainer.appendChild(this.btnSubmit);
this.btnCancel=document.createElement("input");
this.btnCancel.type="button";
this.btnCancel.value="Cancel";
this.divContainer.appendChild(this.btnCancel);
},
toEdit:function(){ //转换成编辑状态
this.divContainer.style.display="block";
document.getElementById(this.id).style.display="none";
this.setValue();
},
toScan:function(){ //转换成浏览状态
document.getElementById(this.id).style.display="block";
this.divContainer.style.display="none";
},
getValue:function(){ //获取输入框的值
return this.input.value;
},
setValue:function(){ //设置输入框的值
this.input.value=document.getElementById(this.id).innerHTML;
},
save:function(){ //保存编辑结果
document.getElementById(this.id).innerHTML=this.getValue();
this.toScan();
},
cancel:function(){ //取消当前的编辑
this.toScan();
}
};
onload=function(){
EditField.configure("p"); //调用configure函数,确定那个DOM元素进行就地编辑
}
Edit Demo
我们 www.jb51.net
Copyright:Super sha.
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]