javascript 就地编辑实现代码

于是有了这个:

无标题文档

// JavaScript Document
var Deditor=(
function(){
//private methods
function addEvent(elem,type,handler){
if(!+"\v1"){//IE
elem[type+handler.toString()]=handler;
elem.attachEvent("on"+type,function(){
elem[type+handler.toString()](); });}
else elem.addEventListener(type,handler,false);
}//兼容事件绑定
function fixEvent(e){
e.preventDefault=function(){return this.returnValue=false;};
e.stopPropagation=function(){return this.cancelBubble=true;};
return e;
}//event兼容
function createEditorFile(){
var span=document.createElement("span");
span.id="directEditorSpan";
var textFile=document.createElement("input");
textFile.type="text";
textFile.id="directEditorTextFile";
var okButton=document.createElement("input");
okButton.type="button";
okButton.value="save";
okButton.id="directEditorOkButton";
var cancelButton=document.createElement("input");
cancelButton.type="button";
cancelButton.value="cancel";
cancelButton.id="directEditorCancelButton";
span.appendChild(textFile);
span.appendChild(okButton);
span.appendChild(cancelButton);
html=span;
elemItems={span:span,textFile:textFile,okButton:okButton,cancelButton:cancelButton};
}// 文本编辑框
function addEvents(){
for(var i=0;i0) {
elems=elems_arg;
createEditorFile();
addEvents();
}
//添加元素和事件
this.thenEffect=function(elements){
if(elements.constructor==Array && elements.length>0)
{elems=elements;
createEditorFile();
addEvents();}
};
this.setUrl=function(u){
url=u;
};
this.setCssHref=function(href){
addLinkCss(href);
};//添加公用方法
};
}//ann function end
)();
window.onload=function(){
var tds=document.getElementsByTagName("td");
var editors=[];
for(var i=0;i

#directEditorSpan input{
border:1px solid #ccc;
background-color:#fff;
color:#696969;
float:left;}
#info{
border-collapse:collapse;
}
#info td {
border:1px solid #ccc;
text-align:left;
padding-left:10px;
line-height:20px;
width:100px;
font-size:12px;
}

姓名 progresstudy
年龄 22
职业 学生

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这个是用类似Java的方式写的,有私有方法,私有属性,公有方法(以前最喜欢用的方法)。
也就是这种类似的形式:


代码如下:

var Deditor=(function(){
//private method
//private prototype
return function(){
//public method
};
})();

我先是把大体的框架写出来:


代码如下:

var Deditor=(function(){
//private method
function addEvent(){}//添加事件
function fixEvent(){}//兼容event对象
function addLinkCss(){}//添加外联样式
function createEditorFile(){}//创建必要的HTML
function addEvents(){}//为新创建元素绑定事件
function fileToContext(){}//编辑转文本
function contextToFile(){}//文本转编辑
function save(){}//保存
function cancel(){}//放弃
//private prototype
var currentContext;//当前编辑内容
var html;//新创建的html对象
var url;//AJAX请求,保存内容
var currentElem;//当前所在元素
var elems=[];//所有可就地编辑的元素
var elemItems={};//所有新创建的节点
return function(){
//public method
this.thenEffect(){}//设置所有可就地编辑的元素
this.setUrl(){}//设置url值
this.setCssHref(){}//设置外联css的href
}
})();

剩下的工作就是把所有的方法给实现了,并完善它。
也许是应为我第一个认真学习的语言是java,所有这种形式的编写风格使我由始至终思路清晰,到此顺利完成了

接下来调试的过程中遇到了两个问题,在这里有必要说一下,在以后的编程中可能会遇到
一个是事件的冒泡引起的:
当点击文本框,或按钮时可编辑域自动隐藏了,原因是父节点捕获了鼠标点击事件,并执行了fileToContext()函数
第二个是,在IE下用innerHTML来清除内容,会把子节点从内存中彻底移除,但如果你用alert(html)检测时,它还会显示此为node节点对象。
所有最好用removeNode来移除节点,如果你打算以后还用的话。

至此'就地编辑'基本完成了(还需要AJAX支持才行),但遇到了一个问题,不能继承(反正到目前我还没想到一个继承的方法),当时实在有些无语。这种方法的确有局限性。

总结一下:编码前一定要好好规划一下,明确到底要使用那一个/几个模式,或确定要不要使用模式。

最后:如果我所写的有任何不对的地方或有任何建议请指正出来,这也是我写博文的目的。

(0)

相关推荐

  • javascript 就地编辑实现代码

    于是有了这个: 无标题文档 // JavaScript Document var Deditor=( function(){ //private methods function addEvent(elem,type,handler){ if(!+"\v1"){//IE elem[type+handler.toString()]=handler; elem.attachEvent("on"+type,function(){ elem[type+handler.toS

  • 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.attachEve

  • javascript 控制图片播放代码

    无标题文档 .photo {width:896px;height:280px;border-top:0;border-right:2px solid #9f9fa1;border-bottom:1px solid #9f9fa1;border-left:2px solid #9f9fa1;font-size:12px} .photo .left {width:310px;height:222px;margin:0 5px} .photo .left img {width:310px;height

  • javascript 双击文本框编辑功能代码

    javascript 双击文本框编辑功能代码 input.t {border:1px solid #fff;background:#fff;} input.s {border:1px solid #369;background:#fff;} var test = document.getElementById("test"); var mysubmit = document.getElementById("submit"); test.ondblclick = fu

  • 分享9个最好用的JavaScript开发工具和代码编辑器

    Web设计和开发是现今越来越流行的职业方向之一.工欲善其事,必先利其器,如果你想在这个领域出类拔萃,那么你就必须具备一些优秀的技能,例如能操作不同的平台.IDE和其他各种各样的工具. 谈到平台和IDE,现在已经不是以前那个掌握一个IDE就能"一招鲜吃遍天"的时代了.激烈的竞争以及蔓延到现在的集成开发环境.基于IDE是用于创建和部署应用程序的强大客户端应用程序,下面我们要分享的就是对于很多网页设计师和开发人员而言,最好的JavaScript 开发工具. 若有不同见解,敬请不吝赐教. 1)

  • JavaScript编写棋盘覆盖代码详解

    一.前言 之前做了一个算法作业,叫做棋盘覆盖,本来需要用c语言来编写的,但是因为我的c语言是半桶水(哈哈),所以索性就把网上的c语言写法改成JavaScript写法,并且把它的覆盖效果显示出来 二.关键代码 <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <titl

  • javascript 打字游戏实现代码

    效果如图所示:下面是核心代码 复制代码 代码如下: GAME = { //随机产生字母 randLetter: function() { var arrLetter = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K&qu

  • javascript密码强度校验代码(两种方法)

    先看效果图: javascript密码强度校验代码,具体实现思路不多说了,请看下面代码和demo. 第一种方法: /* *密码安全程度 *return :全部为字母或者数字,或者密码长度小于 *return : 字母数字组成,或者字母特殊字符,或者数字和特殊字符 *return : 字母和数字和特殊字符 */ String.prototype.passwordStrength=function(){ if(this.length> && this.length<=) retur

  • JavaScript图片轮播代码分享

    为大家分享的JavaScript图片轮播代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta

  • javascript自定义滚动条实现代码

    在工作中经常会遇到内容会超出固定的一个范围,超出的内容一般会使用到滚动条来滚动显示. 但是用浏览器默认的滚动条经常被产品经理鄙视,可是用css却改变不了滚动条的样式,还好,有万能的js ^_^~~ 网上有各种各样的插件,但最顺手的还是自己写的,还可以一边撸一边当学习,自己动手丰衣足食 (*^__^*) 其中这三个问题深深地困扰我: 1.滚动条高度 2.每次点击向上.向下按钮的时候滚动条应该移动多少距离 3.每拖动1px滚动条,页面需要移动多少? 整个的框架大概是长这样的: 先来看看第一个问题.

随机推荐