1.å¦ä½å¼åHTMLç¼è¾å¨
2.eWebEditor简介
3.asp.net KindEditor编辑器整合百度WebUploader插件批量上传
å¦ä½å¼åHTMLç¼è¾å¨
å¼åæ¹æ³å¦ä¸ï¼1.æ·»å ä¸ä¸ªå¯ç¼è¾çiframe
å®ç°HTMLç¼è¾å¨ç第1æ¥å°±æ¯å¨ç½é¡µä¸æ¾ç½®ä¸ä¸ªå¯ç¼è¾çiframeç¨æ¥è¾å ¥ææ¬ï¼ä½¿iframeå¯ç¼è¾æ¹æ³ç¸å½ç®åï¼åªéè¦å°iframeçdesignMode设置为onå³å¯ï¼å ·ä½æ¥éª¤å¦ä¸ï¼
var editor = document.getElementById("IFRAMEçID");
var editorDoc = editor.contentWindow.document;
var editorWindow = editor.contentWindow;
editorDoc.designMode = "on";
editorDoc.open();
editorDoc.write("<html><head></head><body style='margin:0px; padding: 0px;'></body></html>");
editorDoc.close();
2.设置éä¸ææ¬çæ ·å¼
设置éä¸ææ¬æ ·å¼çæ¹æ³æç®åçæ¹å¼å°±æ¯ä½¿ç¨document.execCommand,线编线编ä½æ¯execCommandåè½æ¯è¾å±éï¼ææ¶ä¸è½æ»¡è¶³éæ±ï¼ä¾å¦ï¼execCommand设置åä½å¤§å°åªè½æ¯1-7,ä¸è½ä½¿ç¨åç´ å¤§å°ï¼èä¸å¦æä½ å¨ç¹å»å·¥å ·æ æé®å°è°ç¨execCommandçè¿ç¨ä¸ç¹å»äºå ¶ä»çDIVï¼iframeçéä¸å 容ä¼æ¶å¤±ï¼è¿æ¶è°ç¨execCommandæ¯æ æçãå æ¤æ¬æä»ç»å¦ä¸ç§æ¹æ³ï¼åºæ¬æè·¯å¦ä¸ï¼
(1) è·åéä¸çHTMLï¼
(2) ä¿®æ¹HTMLçæ ·å¼ï¼
(3) ç¨ä¿®æ¹åçHTMLæ¿æ¢éä¸çHTMLã
2.1 è·åéä¸çHTML
å¨ä¸åçæµè§å¨ä¸è·åéä¸çHTMLçæ¹æ³æ¯ä¸åçï¼å¨IEä¸å¯ä»¥ä½¿ç¨
var range = document.selection.createRange()
å¨Firefox,Chromeä¸å使ç¨var range = window.getSelection().getRangeAt(0);
2.2 æ¿æ¢éä¸çHTML
éè¿2.1çæ¹æ³è·åäºè¡¨ç¤ºéä¸å 容ç对象åï¼å°±å¯ä»¥è°ç¨å ¶æ¹æ³æ¥æ¿æ¢æéä¸çå 容ãå¨ä¸åçæµè§å¨ä¸æ¿æ¢éä¸çHTMLçæ¹æ³ææå·®å¼ï¼å¨IEä¸å¯ä»¥åªéè°ç¨range.pasteHTMLå°±è¡äºï¼å¨Firefox,Chromeä¸å使ç¨range.deleteContents å range.insertNode 两个æ¹æ³æ¥å®ç°
2.3 å°è£ ä¸ä¸ªæä½éä¸HTMLçç±»
ç±äº2.1ä¸è·åçrange对象çæ¹æ³å¨ä¸åæµè§å¨ä¸å·®å¼å¾å¤§ï¼å æ¤ï¼ä¸ºäºæ¹ä¾¿å®ç°2.1å2.2æå°ç两个æä½ï¼å°è£ äºä¸ä¸ªæä½éä¸HTMLçç±»SelectionRangeï¼è¯¥ç±»æ两个æ¹æ³ï¼GetSelectedHtmlåReplaceï¼åå«ç¨äºè·åHTMLåæ¿æ¢HTMLãå ¶ä»£ç å¦ä¸ï¼
//ç¨äºè®°å½æµè§å¨çç±»åvar browser = { };
var ua = navigator.userAgent.toLowerCase();
browser.msie = (/msie ([\d.]+)/).test(ua);
browser.firefox = (/firefox\/([\d.]+)/).test(ua);
browser.chrome = (/chrome\/([\d.]+)/).test(ua);
//è·åå¤ä¸ªèç¹çHTML
function GetInnerHTML(nodes)
{
var builder = [];
for (var i = 0; i < nodes.length; i++)
{
if (nodes[i].nodeValue != undefined)
{
builder.push(nodes[i].innerHTML);
}
else
{
if (nodes[i].textContent) builder.push(nodes[i].textContent.replace(/\</ig, function() { return "<"; }));
else if (nodes[i].nodeValue) builder.push(nodes[i].nodeValue.replace(/\</ig, function() { return "<"; }));
}
}
return builder.join("");
}
function SelectionRange(doc, range)
{
//è·åéä¸çå 容çHTML
this.GetSelectedHtml = function()
{
if (range == null) return "";
if (browser.msie)
{
if (range.htmlText != undefined) return range.htmlText;
else return "";
}
else if (browser.firefox || browser.chrome)
{
return GetInnerHTML(range.cloneContents().childNodes);
}
else
{
return "";
}
}
//ç¨htmlæ¿æ¢éä¸çå 容çHTML
this.Replace = function(html)
{
if (range != null)
{
if (browser.msie)
{
if (range.pasteHTML != undefined)
{
//å½åéä¸htmlå¯è½ä»¥ä¸ºæç§åå ï¼ä¾å¦ç¹å»äºå¦ä¸ä¸ªDIVï¼è丢失ï¼éæ°éä¸
range.select();
range.pasteHTML(html);
return true;
}
}
else if (browser.firefox || browser.chrome)
{
if (range.deleteContents != undefined && range.insertNode != undefined)
{
//å°ææ¬html转æ¢æDOM对象
var temp = doc.createElement("DIV");
temp.innerHTML = html;
var elems = [];
for (var i = 0; i < temp.childNodes.length; i++)
{
elems.push(temp.childNodes[i]);
}
//å é¤éä¸çèç¹
range.deleteContents();
//å°html对åºçèç¹(å³tempçææåèç¹)é个æå ¥å°rangeä¸ï¼å¹¶ä»tempä¸å é¤
for (var i in elems)
{
temp.removeChild(elems[i]);
range.insertNode(elems[i]);
}
return true;
}
}
}
return false;
}
}
ä¸æ¤åæ¶ï¼è¿å®ç°äºä¸ä¸ªå½æ°GetSelectionRangeç¨äºè·åå½åéä¸ææ¬å¯¹åºçSelectionRange对象ï¼
function GetSelectionRange(win)
{
var range = null;
if (browser.msie)
{
range = win.document.selection.createRange();
if (range.parentElement().document != win.document)
{
range = null;
}
}
else if (browser.firefox || browser.chrome)
{
var sel = win.getSelection();
if (sel.rangeCount > 0) range = sel.getRangeAt(0); else range = null;
}
return new SelectionRange(win.document, range);
}
2.4 ä¿®æ¹éä¸çHTMLçæ ·å¼
ä¿®æ¹éä¸çHTMLçæ ·å¼æ¹æ³å¹¶ä¸å¤æï¼åªéè¦å°HTML转æDOM对象ï¼ç¶åéå½ç设置æ¯ä¸ä¸ªèç¹å¯¹åºçæ ·å¼çå¼å³å¯,å ·ä½ä»£ç å¦ä¸ï¼
function SetNodeStyle(doc, node, name, value)
{
if (node.innerHTML == undefined)
{
return node;
}
else
{
node.style[name] = value;
for (var i = 0; i < node.childNodes.length; i++)
{
var cn = node.childNodes[i];
if (node.innerHTML != undefined)
{
SetNodeStyle(doc, cn, name, value);
}
}
return node;
}
}
function SetStyle(doc, html, name, value)
{
var dom = doc.createElement("DIV");
dom.innerHTML = html;
for (var i = 0; i < dom.childNodes.length; i++)
{
var node = dom.childNodes[i];
if (node.innerHTML == undefined)
{
//å¦ææ¯ææ¬èç¹ï¼å转æ¢è½¬æ¢æspan
var span = doc.createElement("SPAN");
span.style[name] = value;
if (node.nodeValue != undefined) span.innerHTML = node.nodeValue.replace(/\</ig, function() { return "<"; });
else if (node.textContent != undefined) span.innetHTML = node.textContent.replace(/\</ig, function() { return "<"; });
//æ¿æ¢æææ¬èç¹
dom.replaceChild(span, node);
}
else
{
SetNodeStyle(doc, node, name, value);
}
}
return dom.innerHTML;
}
2.5 示ä¾
使ç¨ä»¥ä¸ç代ç ï¼å°±å¯ä»¥ç¸å½æ¹ä¾¿çå®ç°ä¸ä¸ªHTMLç¼è¾å¨ï¼ä¾å¦ï¼ä»¥ä¸ä»£ç å®ç°å°éä¸ææ¬çåä½å¤§å°è®¾ç½®ä¸ºpxï¼
var range = GetSelectionRange(editorWindow);
var html = SetStyle(editorDoc, range.GetSelectedHtml(), "fontSize", "px");
range.Replace(html);
åçï¼ä½ å¯ä»¥å®ç°è®¾ç½®è¡è·ï¼ç¼©è¿ï¼æå ¥å¾ççåè½ã
3.æ»ç»
æ¬æç»åºç代ç å ¼å®¹IEï¼FirefoxåChromeï¼
eWebEditor简介
eWebEditor是一款无需在客户端安装的在线HTML编辑器,特别适用于WEB开发者,辑器辑器它能将传统textarea替换为直观易用的源码源代富文本输入框,提升网页内容创建和发布的线编线编效率。
编辑器的辑器辑器核心特点是直观配置,通过自带的源码源代那个源码还是开发源码可视工具,可以轻松设置工具栏和各种参数,线编线编它是辑器辑器市场上唯一具有可视化设置的在线编辑器,拥有超过个功能按钮,源码源代涵盖了复制、线编线编剪切、辑器辑器粘贴、源码源代表格、线编线编黑客靶场源码、辑器辑器文件、源码源代字体、颜色等基础编辑功能。
集成eWebEditor到您的系统十分简单,仅需一行代码即可完成调用,它适用于各种内容管理系统、邮件系统、论坛和新闻发布等应用。编辑器支持多语言和国际化,自动适应客户端语言和界面大小,并提供了完善的秘乐app源码接口,供高级用户进行实时控制和内容获取。
在文件管理方面,eWebEditor内置文件上传功能,可以无缝处理、媒体和附件。它还能自动获取远程文件,解决链接文件存在的问题,并能生成缩略图以优化网页加载速度。编辑器还具备文字和水印功能,以及图形热点链接和艺术字功能,为您的内容添加更多互动元素。
对于表格处理,365早期王者源码eWebEditor拥有业界领先的在线编辑能力,支持创建和修改复杂的表格,以及字体样式控制,包括自定义字体大小。此外,它还支持无限级优化的撤销和恢复功能,以及Word/Excel文档的导入,方便内容的导入和管理。
在文件库管理上,用户可以浏览和插入服务器端的多种文件资源,操作体验类似Windows资源管理器,便捷高效。完整运营源码论坛
asp.net KindEditor编辑器整合百度WebUploader插件批量上传
KindEditor介绍
KindEditor是一款开源的HTML可视化编辑器,广泛应用于CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用。它兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器,由JavaScript编写,能与Java、.NET、PHP、ASP等程序无缝结合。其主要特点包括体积小、加载速度快、功能丰富、内置自定义range、支持span标记、基于插件方式设计、修改编辑器风格简单、支持主流浏览器。
WebUploader介绍
WebUploader是由Baidu WebFE(FEX)团队开发的文件上传组件,采用HTML5为主、Flash为辅的现代文件上传方式。它适用于现代浏览器,兼容IE6+、iOS 6+、android 4+,并能充分发挥HTML5优势。WebUploader的优点包括分片与并发结合提高大文件上传速度、支持预览和压缩、提供文件多选、类型过滤、拖拽功能、粘贴功能、HTML5 & FLASH兼容主流浏览器、接口一致、易于扩展、可拆分代码。不过,在使用0.1.5版本时,若服务器端返回非json格式字符串,WebUploader代码可能会报错。
扩展编辑器多图上传插件
为了扩展KindEditor的多图上传功能,可以参考相关文档和经验分享,将WebUploader集成到编辑器中。案例可以上传至阿里云OSS或自建文件服务程序,配置上传后端处理URL。确保返回值格式为JSON,以方便前端解析和处理。对于非JSON返回值,前端需要进行额外解析。
总结
每个项目集成方式可能不同,具体代码无法提供,但可参考开源解决方案。关键在于理解KindEditor和WebUploader的基本功能、特点和集成步骤,根据项目需求灵活配置和调整。