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需刷新才能执行]

(0)

相关推荐

  • javascript下查找父节点的简单方法

    <div>        <a href="#">标题</a>        <ul id="demo">            <li><a href="#" onclick="selectThisItem(this)">项目一</a></li>                <ul>                 

  • JavaScript 节点操作 以及DOMDocument属性和方法

    属性: 1Attributes 存储节点的属性列表(只读) 2childNodes 存储节点的子节点列表(只读) 3dataType 返回此节点的数据类型 4Definition 以DTD或XML模式给出的节点的定义(只读) 5Doctype 指定文档类型节点(只读) 6documentElement 返回文档的根元素(可读写) 7firstChild 返回当前节点的第一个子节点(只读) 8Implementation 返回XMLDOMImplementation对象 9lastChild 返回

  • javascript实现节点(div)名称编辑

    节点html代码如下: 复制代码 代码如下: <div class="img_1" id="img_1" >      <input type="image" class="img_1" src="img/cump.png"></input>      <div class="noteText" id="noteTxt" ty

  • javascript获取网页中指定节点的父节点、子节点的方法小结

    我们在实际的开发当中经常要获取页面中某个html元素,动态的更新该元素的样式.内容属性等. 那么如何获取要更新的这些元素呢?用JavaScript获取这些节点的方法有很多种,下面是总结的一些方法. 1. 通过document节点获取: (1) document.getElementById(elementId):该方法通过节点的ID,可以准确获得需要的元素,是比较简单快捷的方法.如果页面上含有多个相同id的节点,那么只返回第一个节点. 如 今,已经出现了如prototype.Mootools等多

  • javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element

    因为在JavaScript中,mousedown.mouseup.click执行顺序是从左到右的,更重要的是一旦mousedown事件激活,正常情况(不在mousedown事件中绑定的方法使用alert类似方法,因为弹出对象框就阻止了事件传递,即后续调用事件丢失)下后面两个事件也肯定会被激活.平时我们在一个标签上只绑定一个click事件,其实触发click事件也都调用了mousedown.mouseup等事件,只是它们调用周期极短,而且我们又没有编写相关函数与这两个事件绑定,所以不会觉察到.现在

  • javascript dom操作之cloneNode文本节点克隆使用技巧

    true:完全的复制一个节点,什么叫完全呢,就是复制一切,包括他的子节点,以至于文本节点,凡是有的,一律克隆,所谓完全 false:只克隆当前节点,不克隆任何的子节点,当然也不会克隆他所包裹的文本,因为任何文本都有指向他的节点(文本节点) 当然有时候两者是可以通用的哦,如果要复制的节点没有任何的子节点,这是二者全等:比如 img... 为了让大家理解的更为深刻,举个小例子吧: 复制代码 代码如下: <div> <span>Shadow</span> |No Shadow

  • JavaScript 用cloneNode方法克隆节点的代码

    很多时候我们会用for 来生成多个结构相同的节点结构,这样我们需要写很多createElement.setAttribute.appendChild 等代码. 但其实我们只需要有一个html 的模板,就可以用cloneNode 方法对已有的节点进行克隆,包括其子节点. 以下是cloneNode 方法原型: newElement oldElement.cloneNode(bool deep); 这个方法只有一个参数deep,布尔值,如果为true,则克隆oldElement 这个及其子节点,否则只

  • Javascript入门学习第八篇 js dom节点属性说明第1/2页

    今天我们讲DOM属性. 前面其实我们已经碰过DOM属性了. 比如: nodeName,nodeType-..今天我们详细的讲解下. 1,nodeName属性  : 节点的名字. 如果节点是元素节点,那么返回这个元素的名字.此时,相当于tagName属性. 比如: <p>aaaa</p>  : 则返回 p ; 如果是属性节点,nodeName将返回这个属性的名字. 如果是文本节点,nodeName将返回一个#text的字符串. 另外我要说的是: nodeName属性是一个只读属性,不

  • javascript得到XML某节点的子节点个数的脚本

    a.xml: 复制代码 代码如下: <?xml version="1.0" encoding="gb2312"?> <pnode> <node xmlId="0" /> <node xmlId="1" /> <node xmlId="2" /> <node xmlId="3" /> <node xmlId=&q

  • javascript获取dom的下一个节点方法

    利用javascript 写一个在页面点击加减按钮实现数字的累加. 简略的html大概如此.看得懂就好不要在意这些细节啊 <input type="button" value="+" onclick="jia(this)" /> <label class="num">0</label> <input type="button" value="-"

随机推荐