`

Textarea标签封装为Web在线编辑器

    博客分类:
  • C#
阅读更多
Editor.htm
<textarea style="behavior:url('Editor.htc');"></textarea>


Editor.htc


<public:attach event=oncontentready onevent=initEditor()>
<script>
//对象
var vColorObject=null;
var vFontObject=null;
var vFontFamilyDiv=null;
var vFontSizeDiv=null;
var vFileObject=null;

var vConsoleDiv=null;
var vEditorDiv=null;

//按钮提示文本
var strButtonTitleArray=new Array("新建","打开","保存","剪切","复制","粘贴","取消","恢复","粗体","斜体","下划","表格","向左","居中","向右","编号","符号","缩进","缩出","字色","字号","字体","图像","链接","水平","打印","预览");
//按钮静态文本
var strButtonValueArray=new Array("新建","打开","保存","剪切","复制","粘贴","取消","恢复","粗体","斜体","下划","表格","向左","居中","向右","编号","符号","缩进","缩出","字色","字号","字体","图像","链接","水平","打印","预览");
//按钮接口程序
var strButtonDefineFunctionArray=new Array("defineNew()",
"defineOpen()",
"defineSave()",
"defineCut()",
"defineCopy()",
"definePaste()",
"defineUndo()",
"defineRedo()",
"defineBold()",
"defineItalic()",
"defineUnderLine()",
"defineTable()",
"defineJustifyLeft()",
"defineJustifyCenter()",
"defineJustifyRight()",
"defineInsertOrderedList()",
"defineInsertUnorderedList()",
"defineOutdent()",
"defineIndent()",
"defineColor()",
"defineFontSize()",
"defineFontFamily()",
"defineInsertImage()",
"defineCreateLink()",
"defineInsertHorizontalRule()",
"definePrint()",
"definePreview()");
//按钮图标
var strButtonDefineIconArray=new Array("","","","","","","","","","","","","","","","","","","","","","","","","","","");
//按钮响应库
function defineNew()
{
 vEditorDiv.innerHTML="";
}
function defineOpen()
{
 openFileDlg();
}
function defineSave()
{
 element.value=vEditorDiv.innerHTML;
}
function defineCut()
{
 vEditorDiv.focus();
 document.execCommand("Cut");
 vEditorDiv.focus();
}
function defineCopy()
{
 vEditorDiv.focus();
 document.execCommand("Copy");
 vEditorDiv.focus();
}
function definePaste()
{
 vEditorDiv.focus();
 document.execCommand("Paste");
 vEditorDiv.focus();
}
function defineUndo()
{
 vEditorDiv.focus();
 document.execCommand("Undo");
 vEditorDiv.focus();
}
function defineRedo()
{
 vEditorDiv.focus();
 document.execCommand("Redo");
 vEditorDiv.focus();
}
function defineBold()
{
 vEditorDiv.focus();
 document.execCommand("Bold");
 vEditorDiv.focus();
}
function defineItalic()
{
 vEditorDiv.focus();
 document.execCommand("Italic");
 vEditorDiv.focus();
}
function defineUnderLine()
{
 vEditorDiv.focus();
 document.execCommand("UnderLine");
 vEditorDiv.focus();
}
function defineTable()
{
 window.confirm("Table");
}
function defineJustifyLeft()
{
 vEditorDiv.focus();
 document.execCommand("JustifyLeft");
 vEditorDiv.focus();
}
function defineJustifyCenter()
{
 vEditorDiv.focus();
 document.execCommand("JustifyCenter");
 vEditorDiv.focus();
}
function defineJustifyRight()
{
 vEditorDiv.focus();
 document.execCommand("JustifyRight");
 vEditorDiv.focus();
}
function defineInsertOrderedList()
{
 vEditorDiv.focus();
 document.execCommand("InsertOrderedList");
 vEditorDiv.focus();
}
function defineInsertUnorderedList()
{
 vEditorDiv.focus();
 document.execCommand("InsertUnorderedList");
 vEditorDiv.focus();
}
function defineOutdent()
{
 vEditorDiv.focus();
 document.execCommand("Outdent");
 vEditorDiv.focus();
}
function defineIndent()
{
 vEditorDiv.focus();
 document.execCommand("Indent");
 vEditorDiv.focus();
}
function defineColor()
{
 chooseColor(); 
}
function defineFontSize()
{
 chooseFontSize();
}
function defineFontFamily()
{
 chooseFontFamily();
}
function defineInsertImage()
{
 vEditorDiv.focus();
 document.execCommand("InsertImage");
 vEditorDiv.focus();
}
function defineCreateLink()
{
 vEditorDiv.focus();
 document.execCommand("CreateLink");
 vEditorDiv.focus();
}
function defineInsertHorizontalRule()
{
 vEditorDiv.focus();
 document.execCommand("InsertHorizontalRule");
 vEditorDiv.focus();
}
function definePrint()
{
 vEditorDiv.focus();
 document.execCommand("Print");
 vEditorDiv.focus();
}
function definePreview()
{
 window.confirm("Preview");
}
//辅助函数
//颜色滴管
function chooseColor()
{
 var strReturnColor=vColorObject.ChooseColorDlg("FFFFFF");
 strReturnColor=strReturnColor.toString(16);
 if(strReturnColor.length<6)
 {
    var strTempString="000000".substring(0,6-strReturnColor.length);
    strReturnColor=strTempString.concat(strReturnColor);
 }
 vEditorDiv.focus();
 document.execCommand("ForeColor",false,strReturnColor);
 vEditorDiv.focus();
}
function chooseFontSize()
{
 var vObject=window.event.srcElement;
 vFontSizeDiv.style.display="";
 vFontSizeDiv.style.left=getElementDefineLeft(vObject);
 vFontSizeDiv.style.top=getElementDefineTop(vObject)+vObject.offsetHeight;
 element.document.attachEvent('onmousedown',onDocumentMouseDown);
}
function chooseFontFamily()
{
 var vObject=window.event.srcElement;
 vFontFamilyDiv.style.display="";
 vFontFamilyDiv.style.left=getElementDefineLeft(vObject);
 vFontFamilyDiv.style.top=getElementDefineTop(vObject)+vObject.offsetHeight;
 element.document.attachEvent('onmousedown',onDocumentMouseDown);
}
//打开文件
function openFileDlg()
{
 try
 {
  vFileObject.CancelError=true;
  vFileObject.ShowOpen();
  return vFileObject.filename;
 }
 catch(e)
 {
  return e;
 }
}
function onFontFamilyChange()
{
 var vObject=window.event.srcElement;
 var strReturnFontFamily=vObject.options[vObject.selectedIndex].text;
 vEditorDiv.focus();
 document.execCommand("FontName",false,strReturnFontFamily);
 vEditorDiv.focus();
 vFontFamilyDiv.style.display="none";
 element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
function onFontSizeChange()
{
 var vObject=window.event.srcElement;
 var strReturnFontSize=vObject.options[vObject.selectedIndex].text;
 vEditorDiv.focus();
 document.execCommand("FontSize",false,strReturnFontSize);
 vEditorDiv.focus();
 vFontSizeDiv.style.display="none";
 element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
function onDocumentMouseDown()
{
 if(vFontFamilyDiv.contains(event.srcElement))
 {
  return;
 }
 if(vFontSizeDiv.contains(event.srcElement))
 {
  return;
 }
 vFontSizeDiv.style.display="none";
 vFontFamilyDiv.style.display="none";
 element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
//初始化函数
function initEditor()
{
 element.style.display="none";
 vConsoleDiv=document.createElement("div");
 vConsoleDiv.style.border="1px solid #000000";
 vConsoleDiv.style.borderBottom="0px solid #000000";
 vConsoleDiv.style.position="absolute";
 vConsoleDiv.style.width="100%";
 vConsoleDiv.style.left=getElementDefineLeft(element);
 vConsoleDiv.style.top=getElementDefineTop(element);
 window.document.body.insertAdjacentElement("afterbegin",vConsoleDiv);
 initConsole();

 vEditorDiv=document.createElement("div");
 vEditorDiv.style.border="1px solid #000000";
 vEditorDiv.style.position="absolute";
 vEditorDiv.style.width="100%";
 vEditorDiv.style.height="50%";
 vEditorDiv.contentEditable=true;
 vEditorDiv.style.left=getElementDefineLeft(element);
 vEditorDiv.style.top=getElementDefineTop(element)+vConsoleDiv.offsetHeight;
 window.document.body.insertAdjacentElement("afterbegin",vEditorDiv);

 vColorObject=document.createElement("object");
 vColorObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B";
 vColorObject.codeBase="";
 vColorObject.style.width=0;
 vColorObject.style.height=0;
 window.document.body.insertAdjacentElement("afterbegin",vColorObject);

 vFontObject=document.createElement("object");
 vFontObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B";
 vFontObject.codeBase="";
 vFontObject.style.width=0;
 vFontObject.style.height=0;
 window.document.body.insertAdjacentElement("afterbegin",vFontObject);
 //字体选择初始化
 vFontFamilyDiv=document.createElement("div");
 var vSelect=document.createElement("select");
 vSelect.style.border="1px solid #000000";
 vSelect.length=vFontObject.fonts.count;
 for(kIndex=1;kIndex<=vFontObject.fonts.count;kIndex++)
 {
  vOption=document.createElement("option");
  vOption.value=kIndex;
  vOption.text=vFontObject.fonts(kIndex);
  vSelect.add(vOption);
 }
 vSelect.attachEvent("onchange",onFontFamilyChange);
 vFontFamilyDiv.appendChild(vSelect);
 window.document.body.insertAdjacentElement("afterbegin",vFontFamilyDiv);
 vFontFamilyDiv.style.display="none";
 vFontFamilyDiv.style.position="absolute";
 //字号选择初始化
 vFontSizeDiv=document.createElement("div");
 var vSelect=document.createElement("select");
 vSelect.style.border="1px solid #000000";
 for(kIndex=1;kIndex<=7;kIndex++)
 {
  vOption=document.createElement("option");
  vOption.value=kIndex;
  vOption.text=kIndex;
  vSelect.add(vOption);
 }
 vSelect.attachEvent("onchange",onFontSizeChange);
 vFontSizeDiv.appendChild(vSelect);
 window.document.body.insertAdjacentElement("afterbegin",vFontSizeDiv);
 vFontSizeDiv.style.display="none";
 vFontSizeDiv.style.position="absolute";
 //
 vFileObject=document.createElement("object");
 vFileObject.classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB";
 vFileObject.codeBase="http://activex.microsoft.com/controls/vb5/comdlg32.cab";
 vFileObject.style.width=0;
 vFileObject.style.height=0;
 window.document.body.insertAdjacentElement("afterbegin",vFileObject);
}
//初始化控制按钮面板
function initConsole()
{
 var vTable=document.createElement("table");
 vTable.style.backgroundColor="buttonface";
 vTable.style.borderTop="1px solid buttonhighlight";
 vTable.style.borderLeft="1px solid buttonhighlight";
 vTable.style.borderBottom="1px solid buttonshadow";
 vTable.style.borderRight="1px solid buttonshadow";
 vTable.style.width="100%";
 //vTable.style.filter="Alpha(Opacity=60)";//半透明效果.
 
 var vTr=vTable.insertRow(0);
 var vTd=vTr.insertCell(0);
 /*
 vTd.style.backgroundColor="buttonface";
 vTd.style.borderTop="1px solid buttonhighlight";
 vTd.style.borderLeft="1px solid buttonhighlight";
 vTd.style.borderBottom="1px solid buttonshadow";
 vTd.style.borderRight="1px solid buttonshadow";
 */
 for(kIndex=0;kIndex<strButtonTitleArray.length;kIndex++)
 {
  var vA=document.createElement("a");
  vA.style.border="1px solid buttonface";
  vA.style.textAlign="center";
  vA.style.cursor="default";
  vA.style.font="normal 9pt 宋体";
  vA.id=kIndex;
  vA.innerHTML=strButtonValueArray[kIndex];
  vA.title=strButtonTitleArray[kIndex];
  vTd.appendChild(vA);
  vA.attachEvent("onmousedown",onButtonMouseDown);
  vA.attachEvent("onmouseout",onButtonMouseOut);
  vA.attachEvent("onmouseover",onButtonMouseOver);
  vA.attachEvent("onmouseup",onButtonMouseUp);
  vA.attachEvent("onclick",onButtonClick);
 }

 vConsoleDiv.appendChild(vTable);
}
//按钮响应事件
function onButtonMouseDown()
{
 var vObject=window.event.srcElement;
 vObject.style.borderTop="1px solid buttonshadow";
 vObject.style.borderLeft="1px solid buttonshadow";
 vObject.style.borderBottom="1px solid buttonhighlight";
 vObject.style.borderRight="1px solid buttonhighlight";
}
function onButtonMouseOut()
{
 var vObject=window.event.srcElement;
 vObject.style.backgroundColor="";
 vObject.style.border="1px solid buttonface";
}
function onButtonMouseOver()
{
 var vObject=window.event.srcElement;
 vObject.style.borderTop="1px solid buttonhighlight";
 vObject.style.borderLeft="1px solid buttonhighlight";
 vObject.style.borderBottom="1px solid buttonshadow";
 vObject.style.borderRight="1px solid buttonshadow";
}
function onButtonMouseUp()
{
 var vObject=window.event.srcElement;
 vObject.style.borderTop="1px solid buttonhighlight";
 vObject.style.borderLeft="1px solid buttonhighlight";
 vObject.style.borderBottom="1px solid buttonshadow";
 vObject.style.borderRight="1px solid buttonshadow";
}
function onButtonClick()
{
 var vObject=window.event.srcElement;
 eval(strButtonDefineFunctionArray[vObject.id]);
}
//函数库
//取元素绝对位置Left
function getElementDefineLeft(vObject)
{
 var iElementLeft=vObject.offsetLeft;
 while(vObject=vObject.offsetParent)
 {
  iElementLeft+=vObject.offsetLeft;
 }
 return iElementLeft;
}
//取元素绝对位置Top
function getElementDefineTop(vObject)
{
 var iElementTop=vObject.offsetTop;
 while(vObject=vObject.offsetParent)
 {
     iElementTop+=vObject.offsetTop;
 }
 return iElementTop;
}
</script>
</public:attach>
分享到:
评论

相关推荐

    统计字数的textarea

    这个功能在许多Web应用中都有应用,例如在线编辑器、评论系统或者表单填写等。在这个场景下,我们需要实现一个能够动态计算textarea中字符数的机制,并可能附加一些额外的功能,比如限制最大字数,或者显示剩余字数...

    jQuery仿thinkphp在线编辑器

    在构建在线编辑器时,jQuery的灵活性和易用性为我们提供了极大的便利。 而ThinkPHP是一款基于PHP的开源框架,以其简洁、高效的MVC模式和丰富的内置组件,深受开发者的喜爱。在构建在线编辑器时,我们可以利用...

    js封装的textarea操作方法集合(兼容很好)

    这个方法对于需要动态获取用户输入位置的应用非常有用,例如在开发富文本编辑器时。 2. setCursorPosition:设置光标位置的方法。它通过传入textarea元素和光标位置值来改变光标位置。在某些应用场景下,需要动态...

    教你在线开发HTML编辑器

    标题 "教你在线开发HTML编辑器" 涉及的核心知识点是创建一个用户界面,用于让用户在Web应用中编辑和格式化HTML内容。HTML编辑器通常用于博客、论坛、CMS(内容管理系统)等场合,使非程序员也能方便地编辑富文本。 ...

    web组建开发指南

    - **textarea标签**:创建多行文本输入区域,适合输入较长的文本内容。 - **label标签**:为其他表单控件创建标签,提高表单的可访问性和可用性。 - **checkboxGroup标签**:创建一组复选框,方便管理和操作多个...

    Tinymce富文本框封装

    总结来说,Tinymce富文本编辑器的封装是一个集成了编辑器基本功能设置、个性化配置、事件处理以及可能的插件集成的过程,目的是为了让它更好地服务于特定的Web应用。通过深入理解和灵活运用,开发者可以构建出满足...

    jQuery富文本编辑器插件-wysiwyg.js

    总之,`jQuery富文本编辑器插件-wysiwyg.js`是Web开发中一个实用的工具,它将复杂的技术细节封装起来,使开发者能更专注于内容的创作和交互体验的设计。无论是小型项目还是大型应用程序,它都能提供高效、可靠的富...

    asp.net SinaEditor编辑器

    SinaEditor编辑器主要由JavaScript和HTML组成,但在.NET环境中,通常会通过AJAX或者WebControl的方式进行封装,以便更好地与ASP.NET应用程序交互。编辑器提供了文本格式化、插入图片、链接创建、插入表格等多种常见...

    我的富文本编辑器

    富文本编辑器是一种在网页上实现用户可以进行复杂文本编辑的工具,通常用于博客、论坛、CMS(内容管理系统)等在线平台。它们提供了一种友好的界面,让用户能够像在桌面文字处理软件中那样编辑文本,包括字体设置、...

    百度富文本编辑器和springMVC整合

    在Web开发中,富文本编辑器是不可或缺的一部分,它允许用户在网页上创建、编辑和格式化文本,就像在桌面应用程序中使用Word那样。百度的UEditor是一款功能强大的富文本编辑器,它提供了丰富的编辑选项,包括字体设置...

    struts1.2基本标签使用视频

    `form`标签库则提供了表单验证功能,如`&lt;form:errors&gt;`用于显示错误信息,`&lt;form:input&gt;`和`&lt;form:textarea&gt;`则用于创建带验证规则的输入字段。 视频教程会详细介绍这些标签的使用方法,通过实例演示如何在实际开发...

    fckeditor封装

    虽然现在有了更多选择,但理解FCKeditor的工作原理和封装方法对于理解富文本编辑器的运作机制仍然具有重要意义。在实际项目中,开发者可以根据需求选择合适的编辑器,并进行相应的封装,以提高开发效率和产品质量。

    web-form-portlet.rar_portlet_web form

    对于“web-form-portlet.rar”,这可能是一个封装了特定Web表单功能的Portlet插件。 五、开发实践 在实际开发中,我们可能会遇到以下挑战: - 兼容性问题:确保Portlet在不同门户容器上的兼容性和性能。 - 安全性:...

    java web 富文本框

    这通常涉及到为指定元素(如&lt;textarea&gt;)调用库的初始化函数,设置相关配置,如宽度、高度、工具栏按钮等。 3. **数据交互**:当用户编辑内容后,富文本框会将内容以HTML格式存储。你需要监听编辑器的事件(如...

    AngularJS实现所见即所得富文本编辑器源码.zip

    AngularJS的核心特性包括双向数据绑定、依赖注入、模块化和指令系统,这些都为构建富文本编辑器提供了便利。在这个项目中,开发者可能利用了AngularJS的数据绑定来同步编辑器中的文本内容与模型数据,这样当用户在...

    struts2标签的使用

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序。在Struts2中,标签库极大地简化了视图层的开发,提供了丰富的UI组件和逻辑控制标签,使得开发者可以更加专注于业务逻辑而不是繁琐的...

    vue+tinymce.rar

    在Web开发中,富文本编辑器是一个不可或缺的组件,它允许用户以类似Word的方式编辑内容。TinyMCE是一个功能强大的开源富文本编辑器,而Vue.js则是一个流行的前端框架。将两者结合,可以创建一个高效且易于维护的前端...

    struts2.0标签库简介

    `&lt;s:generator&gt;` - 生成器标签 - 用于生成动态内容,如迭代器中的分隔符。 #### 19. `&lt;s:head&gt;` - 头部标签 - 用于包含页面头部信息,如样式表和脚本引用。 #### 20. `&lt;s:hidden&gt;` - 隐藏字段标签 - 创建隐藏...

    Jquery实现textarea根据文本内容自适应高度

    在Web开发过程中,文本编辑区域textarea是一个常用的表单元素,用以收集用户的多行文本输入。然而,传统的textarea高度是固定的,若用户输入的文本超出了预设的高度,就必须通过滚动条才能查看到全部内容。为了提升...

    WebWork标签库

    - **`**:生成迭代器。可以自定义迭代逻辑,如过滤、转换等。 - **`&lt;ww:append/&gt;`**:追加操作。可用于动态构建字符串或集合。 - **`&lt;ww:subset/&gt;`**:子集提取。从集合中选取一部分元素。 - **`&lt;ww:merge/&gt;`**:...

Global site tag (gtag.js) - Google Analytics