主题: wordpaste的清理效果不好,可以换成xhEditor的正则
作者: bool, 发布日期: 2010-03-11 15:31:24, 浏览数: 5180

  var str = KE.util.getIframeDoc(wordIframe).body.innerHTML;

  //格式化
  str = str.replace(/(<link(?:\s+[^>]*?)?)\s+href\s*=\s*(["']?)\s*file:\/\/.+?\s*\2((?:\s+[^>]*?)?\s*\/?>)/ig, '');
  
  //区块标签清理
  str = str.replace(/<!--[\s\S]*?-->|<!(--)?\[[\s\S]+?\](--)?>|<style(\s+[^>]*?)?>[\s\S]*?<\/style>/ig, '');
  str = str.replace(/<\/?\w+:[^>]*>/ig, '');
  str = str.replace(/<\/?(span|a|img)(\s+[^>]*?)?>/ig,'');

  //属性清理
  str = str.replace(/(<\w+(?:\s+[^>]*?)?)\s+class\s*=\s*(["']?)\s*mso.+?\s*\2((?:\s+[^>]*?)?\s*\/?>)/ig, "$1$3");//删除所有mso开头的样式
  str = str.replace(/(<\w+(?:\s+[^>]*?)?)\s+lang\s*=\s*(["']?)\s*.+?\s*\2((?:\s+[^>]*?)?\s*\/?>)/ig, "$1$3");//删除lang属性
  str = str.replace(/(<\w+(?:\s+[^>]*?)?)\s+align\s*=\s*(["']?)\s*left\s*\2((?:\s+[^>]*?)?\s*\/?>)/ig, "$1$3");//取消align=left

  //样式清理
  str = str.replace(/<\w+(?:\s+[^>]*?)?(\s+style\s*=\s*(["']?)\s*(.*?)\s*\2)(?:\s+[^>]*?)?\s*\/?>/ig,function(all,attr,p,styles){
   styles=KE.util.trim(styles.replace(/\s*(mso-[^:]+:.+?|margin\s*:\s*0cm 0cm 0pt\s*|(text-align|font-variant|line-height)\s*:\s*.+?)(;|$)\s*/ig,''));
   return all.replace(attr,true?'':styles?' style="'+styles+'"':'');
  });


实际项目中大多数客户喜欢从Word里拷贝数据,建议加个参数,控制 KE.util.execCommand(id, 'paste', null); 数据粘贴进来后,默认是否清理Word,现在很多都这样如:FCKeditor,TinyMCE ,xhEditor

作者: Roddy, 发布日期: 2010-03-11 15:57:04
谢谢您的意见,这部分还不够重视,以后会加大开发力度。
回复
发表新帖 发表回复