从 word 复制,粘贴到 niceedit 并删除 word 标签
Copy from word, paste to niceedit and remove word tags
我尝试从 MS Word 复制文本并将其粘贴到我的 Web 应用程序的 niceditor 中,它的格式基于 MS Word 格式。
在将内容保存到 niceeditor
之前,我需要删除文本上的文字格式
如果您希望删除所有编辑。将内容粘贴到记事本中,然后粘贴到niceeditor。
谢谢大家,我从 google 找到了解决方案。解决方案是,在 nicEdit 插件中更改特定的 class
在您的 nicedit.js 文件
中按如下方式替换 nicEditorInstance
var nicEditorInstance=bkClass.extend({
isSelected : false,
construct : function(e,options,nicEditor) {
this.ne = nicEditor;
this.elm = this.e = e;
this.options = options || {};
newX = parseInt(e.getStyle('width')) || e.clientWidth;
newY = parseInt(e.getStyle('height')) || e.clientHeight;
this.initialHeight = newY-8;
var isTextarea = (e.nodeName.toLowerCase() == "textarea");
if(isTextarea || this.options.hasPanel) {
var ie7s = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat"))
var s = {width: newX+'px', border : '2px solid #F1F1F1', borderTop : 0, overflowY : 'auto', overflowX: 'hidden' };
s[(ie7s) ? 'height' : 'maxHeight'] = (this.ne.options.maxHeight) ? this.ne.options.maxHeight+'px' : null;
this.editorContain = new bkElement('DIV').setStyle(s).appendBefore(e);
/* CLEAN WORD PASTE MOD */
//var editorElm = new bkElement('DIV').setAttributes({id : e.id}).setStyle({width : (newX-8)+'px', margin: '4px', minHeight : newY+'px'}).addClass('main').appendTo(this.editorContain);
var editorElm = new bkElement('DIV').setStyle({width : (newX-8)+'px', margin: '4px', minHeight : newY+'px'}).addClass('main').appendTo(this.editorContain);
e.setStyle({display : 'none'});
editorElm.innerHTML = e.innerHTML;
if(isTextarea) {
editorElm.setContent(e.value);
this.copyElm = e;
var f = e.parentTag('FORM');
if(f) { bkLib.addEvent( f, 'submit', this.saveContent.closure(this)); }
}
editorElm.setStyle((ie7s) ? {height : newY+'px'} : {overflow: 'hidden'});
this.elm = editorElm;
}
this.ne.addEvent('blur',this.blur.closure(this));
this.init();
this.blur();
},
init : function() {
this.elm.setAttribute('contentEditable','true');
if(this.getContent() == "") {
this.setContent('<br />');
}
this.instanceDoc = document.defaultView;
this.elm.addEvent('mousedown',this.selected.closureListener(this)).addEvent('keypress',this.keyDown.closureListener(this)).addEvent('focus',this.selected.closure(this)).addEvent('blur',this.blur.closure(this)).addEvent('keyup',this.selected.closure(this));
this.ne.fireEvent('add',this);
/* CLEAN WORD PASTE MOD */
this.elm.addEvent('paste',this.initPasteClean.closureListener(this));
},
initPasteClean : function() {
this.pasteCache = this.getElm().innerHTML;
setTimeout(this.pasteClean.closure(this),100);
},
/* CLEAN WORD PASTE MOD : pasteClean method added for clean word paste */
pasteClean : function() {
var matchedHead = "";
var matchedTail = "";
var newContent = this.getElm().innerHTML;
this.ne.fireEvent("get",this);
var newContentStart = 0;
var newContentFinish = 0;
var newSnippet = "";
var tempNode = document.createElement("div");
/* Find start of both strings that matches */
for (newContentStart = 0; newContent.charAt(newContentStart) == this.pasteCache.charAt(newContentStart); newContentStart++)
{
matchedHead += this.pasteCache.charAt(newContentStart);
}
/* If newContentStart is inside a HTML tag, move to opening brace of tag */
for (var i = newContentStart; i >= 0; i--)
{
if (this.pasteCache.charAt(i) == "<")
{
newContentStart = i;
matchedHead = this.pasteCache.substring(0, newContentStart);
break;
}
else if(this.pasteCache.charAt(i) == ">")
{
break;
}
}
newContent = this.reverse(newContent);
this.pasteCache = this.reverse(this.pasteCache);
/* Find end of both strings that matches */
for (newContentFinish = 0; newContent.charAt(newContentFinish) == this.pasteCache.charAt(newContentFinish); newContentFinish++)
{
matchedTail += this.pasteCache.charAt(newContentFinish);
}
/* If newContentFinish is inside a HTML tag, move to closing brace of tag */
for (var i = newContentFinish; i >= 0; i--)
{
if (this.pasteCache.charAt(i) == ">")
{
newContentFinish = i;
matchedTail = this.pasteCache.substring(0, newContentFinish);
break;
}
else if(this.pasteCache.charAt(i) == "<")
{
break;
}
}
matchedTail = this.reverse(matchedTail);
/* If there's no difference in pasted content */
if (newContentStart == newContent.length - newContentFinish)
{
return false;
}
newContent = this.reverse(newContent);
newSnippet = newContent.substring(newContentStart, newContent.length - newContentFinish);
newSnippet = this.validTags(newSnippet);
/* Replace opening bold tags with strong */
newSnippet = newSnippet.replace(/<b(\s+|>)/g, "<strong");
/* Replace closing bold tags with closing strong */
newSnippet = newSnippet.replace(/<\/b(\s+|>)/g, "</strong");
/* Replace italic tags with em */
newSnippet = newSnippet.replace(/<i(\s+|>)/g, "<em");
/* Replace closing italic tags with closing em */
newSnippet = newSnippet.replace(/<\/i(\s+|>)/g, "</em");
/* strip out comments -cgCraft */
newSnippet = newSnippet.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g, "");
/* strip out -cgCraft */
newSnippet = newSnippet.replace(/ /gi, " ");
/* strip out extra spaces -cgCraft */
newSnippet = newSnippet.replace(/ <\//gi, "</");
while (newSnippet.indexOf(" ") != -1) {
var anArray = newSnippet.split(" ")
newSnippet = anArray.join(" ")
}
/* strip -cgCraft */
newSnippet = newSnippet.replace(/^\s*|\s*$/g, "");
/* Strip out unaccepted attributes */
newSnippet = newSnippet.replace(/<[^>]*>/g, function(match)
{
match = match.replace(/ ([^=]+)="[^"]*"/g, function(match2, attributeName)
{
if (attributeName == "alt" || attributeName == "href" || attributeName == "src" || attributeName == "title")
{
return match2;
}
return "";
});
return match;
}
);
/* Final cleanout for MS Word cruft */
newSnippet = newSnippet.replace(/<\?xml[^>]*>/g, "");
newSnippet = newSnippet.replace(/<[^ >]+:[^>]*>/g, "");
newSnippet = newSnippet.replace(/<\/[^ >]+:[^>]*>/g, "");
/* remove undwanted tags */
newSnippet = newSnippet.replace(/<(div|span|style|meta|link){1}.*?>/gi,'');
this.content = matchedHead + newSnippet + matchedTail;
this.ne.fireEvent("set",this);
this.elm.innerHTML = this.content;
},
reverse : function(sentString) {
var theString = "";
for (var i = sentString.length - 1; i >= 0; i--) {
theString += sentString.charAt(i);
}
return theString;
},
/* CLEAN WORD PASTE MOD : validTags method added for clean word paste */
validTags : function(snippet) {
var theString = snippet;
/* Replace uppercase element names with lowercase */
theString = theString.replace(/<[^> ]*/g, function(match){return match.toLowerCase();});
/* Replace uppercase attribute names with lowercase */
theString = theString.replace(/<[^>]*>/g, function(match) {
match = match.replace(/ [^=]+=/g, function(match2){return match2.toLowerCase();});
return match;
});
/* Put quotes around unquoted attributes */
theString = theString.replace(/<[^>]*>/g, function(match) {
match = match.replace(/( [^=]+=)([^"][^ >]*)/g, "\"\"");
return match;
});
return theString;
},
remove : function() {
this.saveContent();
if(this.copyElm || this.options.hasPanel) {
this.editorContain.remove();
this.e.setStyle({'display' : 'block'});
this.ne.removePanel();
}
this.disable();
this.ne.fireEvent('remove',this);
},
disable : function() {
this.elm.setAttribute('contentEditable','false');
},
getSel : function() {
return (window.getSelection) ? window.getSelection() : document.selection;
},
getRng : function() {
var s = this.getSel();
if(!s) { return null; }
return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
},
selRng : function(rng,s) {
if(window.getSelection) {
s.removeAllRanges();
s.addRange(rng);
} else {
rng.select();
}
},
selElm : function() {
var r = this.getRng();
if(r.startContainer) {
var contain = r.startContainer;
if(r.cloneContents().childNodes.length == 1) {
for(var i=0;i<contain.childNodes.length;i++) {
var rng = contain.childNodes[i].ownerDocument.createRange();
rng.selectNode(contain.childNodes[i]);
if(r.compareBoundaryPoints(Range.START_TO_START,rng) != 1 &&
r.compareBoundaryPoints(Range.END_TO_END,rng) != -1) {
return $BK(contain.childNodes[i]);
}
}
}
return $BK(contain);
} else {
return $BK((this.getSel().type == "Control") ? r.item(0) : r.parentElement());
}
},
saveRng : function() {
this.savedRange = this.getRng();
this.savedSel = this.getSel();
},
restoreRng : function() {
if(this.savedRange) {
this.selRng(this.savedRange,this.savedSel);
}
},
keyDown : function(e,t) {
if(e.ctrlKey) {
this.ne.fireEvent('key',this,e);
}
},
selected : function(e,t) {
if(!t) {t = this.selElm()}
if(!e.ctrlKey) {
var selInstance = this.ne.selectedInstance;
if(selInstance != this) {
if(selInstance) {
this.ne.fireEvent('blur',selInstance,t);
}
this.ne.selectedInstance = this;
this.ne.fireEvent('focus',selInstance,t);
}
this.ne.fireEvent('selected',selInstance,t);
this.isFocused = true;
this.elm.addClass('selected');
}
return false;
},
blur : function() {
this.isFocused = false;
this.elm.removeClass('selected');
},
saveContent : function() {
if(this.copyElm || this.options.hasPanel) {
this.ne.fireEvent('save',this);
(this.copyElm) ? this.copyElm.value = this.getContent() : this.e.innerHTML = this.getContent();
}
},
getElm : function() {
return this.elm;
},
getContent : function() {
this.content = this.getElm().innerHTML;
this.ne.fireEvent('get',this);
return this.content;
},
setContent : function(e) {
this.content = e;
this.ne.fireEvent('set',this);
this.elm.innerHTML = this.content;
},
nicCommand : function(cmd,args) {
document.execCommand(cmd,false,args);
}
});
我尝试从 MS Word 复制文本并将其粘贴到我的 Web 应用程序的 niceditor 中,它的格式基于 MS Word 格式。 在将内容保存到 niceeditor
之前,我需要删除文本上的文字格式如果您希望删除所有编辑。将内容粘贴到记事本中,然后粘贴到niceeditor。
谢谢大家,我从 google 找到了解决方案。解决方案是,在 nicEdit 插件中更改特定的 class 在您的 nicedit.js 文件
中按如下方式替换 nicEditorInstancevar nicEditorInstance=bkClass.extend({
isSelected : false,
construct : function(e,options,nicEditor) {
this.ne = nicEditor;
this.elm = this.e = e;
this.options = options || {};
newX = parseInt(e.getStyle('width')) || e.clientWidth;
newY = parseInt(e.getStyle('height')) || e.clientHeight;
this.initialHeight = newY-8;
var isTextarea = (e.nodeName.toLowerCase() == "textarea");
if(isTextarea || this.options.hasPanel) {
var ie7s = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat"))
var s = {width: newX+'px', border : '2px solid #F1F1F1', borderTop : 0, overflowY : 'auto', overflowX: 'hidden' };
s[(ie7s) ? 'height' : 'maxHeight'] = (this.ne.options.maxHeight) ? this.ne.options.maxHeight+'px' : null;
this.editorContain = new bkElement('DIV').setStyle(s).appendBefore(e);
/* CLEAN WORD PASTE MOD */
//var editorElm = new bkElement('DIV').setAttributes({id : e.id}).setStyle({width : (newX-8)+'px', margin: '4px', minHeight : newY+'px'}).addClass('main').appendTo(this.editorContain);
var editorElm = new bkElement('DIV').setStyle({width : (newX-8)+'px', margin: '4px', minHeight : newY+'px'}).addClass('main').appendTo(this.editorContain);
e.setStyle({display : 'none'});
editorElm.innerHTML = e.innerHTML;
if(isTextarea) {
editorElm.setContent(e.value);
this.copyElm = e;
var f = e.parentTag('FORM');
if(f) { bkLib.addEvent( f, 'submit', this.saveContent.closure(this)); }
}
editorElm.setStyle((ie7s) ? {height : newY+'px'} : {overflow: 'hidden'});
this.elm = editorElm;
}
this.ne.addEvent('blur',this.blur.closure(this));
this.init();
this.blur();
},
init : function() {
this.elm.setAttribute('contentEditable','true');
if(this.getContent() == "") {
this.setContent('<br />');
}
this.instanceDoc = document.defaultView;
this.elm.addEvent('mousedown',this.selected.closureListener(this)).addEvent('keypress',this.keyDown.closureListener(this)).addEvent('focus',this.selected.closure(this)).addEvent('blur',this.blur.closure(this)).addEvent('keyup',this.selected.closure(this));
this.ne.fireEvent('add',this);
/* CLEAN WORD PASTE MOD */
this.elm.addEvent('paste',this.initPasteClean.closureListener(this));
},
initPasteClean : function() {
this.pasteCache = this.getElm().innerHTML;
setTimeout(this.pasteClean.closure(this),100);
},
/* CLEAN WORD PASTE MOD : pasteClean method added for clean word paste */
pasteClean : function() {
var matchedHead = "";
var matchedTail = "";
var newContent = this.getElm().innerHTML;
this.ne.fireEvent("get",this);
var newContentStart = 0;
var newContentFinish = 0;
var newSnippet = "";
var tempNode = document.createElement("div");
/* Find start of both strings that matches */
for (newContentStart = 0; newContent.charAt(newContentStart) == this.pasteCache.charAt(newContentStart); newContentStart++)
{
matchedHead += this.pasteCache.charAt(newContentStart);
}
/* If newContentStart is inside a HTML tag, move to opening brace of tag */
for (var i = newContentStart; i >= 0; i--)
{
if (this.pasteCache.charAt(i) == "<")
{
newContentStart = i;
matchedHead = this.pasteCache.substring(0, newContentStart);
break;
}
else if(this.pasteCache.charAt(i) == ">")
{
break;
}
}
newContent = this.reverse(newContent);
this.pasteCache = this.reverse(this.pasteCache);
/* Find end of both strings that matches */
for (newContentFinish = 0; newContent.charAt(newContentFinish) == this.pasteCache.charAt(newContentFinish); newContentFinish++)
{
matchedTail += this.pasteCache.charAt(newContentFinish);
}
/* If newContentFinish is inside a HTML tag, move to closing brace of tag */
for (var i = newContentFinish; i >= 0; i--)
{
if (this.pasteCache.charAt(i) == ">")
{
newContentFinish = i;
matchedTail = this.pasteCache.substring(0, newContentFinish);
break;
}
else if(this.pasteCache.charAt(i) == "<")
{
break;
}
}
matchedTail = this.reverse(matchedTail);
/* If there's no difference in pasted content */
if (newContentStart == newContent.length - newContentFinish)
{
return false;
}
newContent = this.reverse(newContent);
newSnippet = newContent.substring(newContentStart, newContent.length - newContentFinish);
newSnippet = this.validTags(newSnippet);
/* Replace opening bold tags with strong */
newSnippet = newSnippet.replace(/<b(\s+|>)/g, "<strong");
/* Replace closing bold tags with closing strong */
newSnippet = newSnippet.replace(/<\/b(\s+|>)/g, "</strong");
/* Replace italic tags with em */
newSnippet = newSnippet.replace(/<i(\s+|>)/g, "<em");
/* Replace closing italic tags with closing em */
newSnippet = newSnippet.replace(/<\/i(\s+|>)/g, "</em");
/* strip out comments -cgCraft */
newSnippet = newSnippet.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g, "");
/* strip out -cgCraft */
newSnippet = newSnippet.replace(/ /gi, " ");
/* strip out extra spaces -cgCraft */
newSnippet = newSnippet.replace(/ <\//gi, "</");
while (newSnippet.indexOf(" ") != -1) {
var anArray = newSnippet.split(" ")
newSnippet = anArray.join(" ")
}
/* strip -cgCraft */
newSnippet = newSnippet.replace(/^\s*|\s*$/g, "");
/* Strip out unaccepted attributes */
newSnippet = newSnippet.replace(/<[^>]*>/g, function(match)
{
match = match.replace(/ ([^=]+)="[^"]*"/g, function(match2, attributeName)
{
if (attributeName == "alt" || attributeName == "href" || attributeName == "src" || attributeName == "title")
{
return match2;
}
return "";
});
return match;
}
);
/* Final cleanout for MS Word cruft */
newSnippet = newSnippet.replace(/<\?xml[^>]*>/g, "");
newSnippet = newSnippet.replace(/<[^ >]+:[^>]*>/g, "");
newSnippet = newSnippet.replace(/<\/[^ >]+:[^>]*>/g, "");
/* remove undwanted tags */
newSnippet = newSnippet.replace(/<(div|span|style|meta|link){1}.*?>/gi,'');
this.content = matchedHead + newSnippet + matchedTail;
this.ne.fireEvent("set",this);
this.elm.innerHTML = this.content;
},
reverse : function(sentString) {
var theString = "";
for (var i = sentString.length - 1; i >= 0; i--) {
theString += sentString.charAt(i);
}
return theString;
},
/* CLEAN WORD PASTE MOD : validTags method added for clean word paste */
validTags : function(snippet) {
var theString = snippet;
/* Replace uppercase element names with lowercase */
theString = theString.replace(/<[^> ]*/g, function(match){return match.toLowerCase();});
/* Replace uppercase attribute names with lowercase */
theString = theString.replace(/<[^>]*>/g, function(match) {
match = match.replace(/ [^=]+=/g, function(match2){return match2.toLowerCase();});
return match;
});
/* Put quotes around unquoted attributes */
theString = theString.replace(/<[^>]*>/g, function(match) {
match = match.replace(/( [^=]+=)([^"][^ >]*)/g, "\"\"");
return match;
});
return theString;
},
remove : function() {
this.saveContent();
if(this.copyElm || this.options.hasPanel) {
this.editorContain.remove();
this.e.setStyle({'display' : 'block'});
this.ne.removePanel();
}
this.disable();
this.ne.fireEvent('remove',this);
},
disable : function() {
this.elm.setAttribute('contentEditable','false');
},
getSel : function() {
return (window.getSelection) ? window.getSelection() : document.selection;
},
getRng : function() {
var s = this.getSel();
if(!s) { return null; }
return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
},
selRng : function(rng,s) {
if(window.getSelection) {
s.removeAllRanges();
s.addRange(rng);
} else {
rng.select();
}
},
selElm : function() {
var r = this.getRng();
if(r.startContainer) {
var contain = r.startContainer;
if(r.cloneContents().childNodes.length == 1) {
for(var i=0;i<contain.childNodes.length;i++) {
var rng = contain.childNodes[i].ownerDocument.createRange();
rng.selectNode(contain.childNodes[i]);
if(r.compareBoundaryPoints(Range.START_TO_START,rng) != 1 &&
r.compareBoundaryPoints(Range.END_TO_END,rng) != -1) {
return $BK(contain.childNodes[i]);
}
}
}
return $BK(contain);
} else {
return $BK((this.getSel().type == "Control") ? r.item(0) : r.parentElement());
}
},
saveRng : function() {
this.savedRange = this.getRng();
this.savedSel = this.getSel();
},
restoreRng : function() {
if(this.savedRange) {
this.selRng(this.savedRange,this.savedSel);
}
},
keyDown : function(e,t) {
if(e.ctrlKey) {
this.ne.fireEvent('key',this,e);
}
},
selected : function(e,t) {
if(!t) {t = this.selElm()}
if(!e.ctrlKey) {
var selInstance = this.ne.selectedInstance;
if(selInstance != this) {
if(selInstance) {
this.ne.fireEvent('blur',selInstance,t);
}
this.ne.selectedInstance = this;
this.ne.fireEvent('focus',selInstance,t);
}
this.ne.fireEvent('selected',selInstance,t);
this.isFocused = true;
this.elm.addClass('selected');
}
return false;
},
blur : function() {
this.isFocused = false;
this.elm.removeClass('selected');
},
saveContent : function() {
if(this.copyElm || this.options.hasPanel) {
this.ne.fireEvent('save',this);
(this.copyElm) ? this.copyElm.value = this.getContent() : this.e.innerHTML = this.getContent();
}
},
getElm : function() {
return this.elm;
},
getContent : function() {
this.content = this.getElm().innerHTML;
this.ne.fireEvent('get',this);
return this.content;
},
setContent : function(e) {
this.content = e;
this.ne.fireEvent('set',this);
this.elm.innerHTML = this.content;
},
nicCommand : function(cmd,args) {
document.execCommand(cmd,false,args);
}
});