<table id="tbl1" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none">
  <tr>
    <td width="91" valign="top" style="width: 68.4pt; border: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm; background: #E0E0E0">
    <p class="MsoNormal"><span style="font-family: 宋体">表名</span></td>
  </tr>
</table><script>
alert(tbl1.outerHTML)
var objTable=document.createElement("TABLE"),newTr,newTd;
objTable.id="tbl1";
objTable.className="myclass";
for(var i=0;i<tbl1.rows.length;i++){
newTr=objTable.insertRow();
for(var j=0;j<tbl1.rows[i].cells.length;j++){
newTd=newTr.insertCell();
newTd.colSpan=(tbl1.rows[i].cells[j].colSpan==null?1:tbl1.rows[i].cells[j].colSpan);
newTd.rowSpan=(tbl1.rows[i].cells[j].rowSpan==null?1:tbl1.rows[i].cells[j].rowSpan);
newTd.innerText=tbl1.rows[i].cells[j].innerText;
}
}
tbl1.outerHTML=objTable.outerHTML;
alert(document.all('tbl1').outerHTML)
</script>

解决方案 »

  1.   

    完全长度的删除垃圾好像不太现实,因为除了TABLE外还有P其他的标志,也存在这个问题,
    我们在做项目的时候,遇到你的同样的问题,我们的解决方法是直接不用允许从外面COPY进HTML的东西,而是把它转换成TXT格式的,让他重新到这个HTML编辑器里重新排版,说下我的实现方法吧:
    捕捉PASTE事件,
    发生这个事件时,用我们自己的方法去替代它,
    在这个事件里,我们把粘贴板里的,内容转换成TXT格式,PASTE到当前光标位置,分析:
    触发PASTE事件的地方,共有两种,一种是CTRL V键盘按键触发,一种是菜单上调用
    Composition.document.execCommand('paste')方法触发,所以我们需要的就是override掉这些方法的正常处理,而用我们自己的方法处理这些事件。
    实现:
    //这里是ctrl v的捕捉处理
    function onkeydown(e)
    {
    var ev = this.parentWindow.event
       if (ev.ctrlKey==true&&ev.keyCode==86) { 
       //ctrl v
    Composition.document.selection.createRange().text=window.clipboardData.getData("Text");//到当前光标位置
    ev.returnValue=false;//不允许继续去paste
    }
    }
    同样,在你触发Composition.document.execCommand('paste');函数的地方,也应该去用方法替换掉
      

  2.   

    liuzxit(每日晕十几次):thanks,学习一下funboy88(司令):在我这个项目里不允许copy是不可能的,因为有许多复杂的表格内容,用户已经做好,直接copy进来比较省事,而且你也许也知道,在线编辑器对表格进行复杂操作十分困难,比如说拆分合并等等。
      

  3.   

    try:
    <script defer>
    var html='<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none">'
        html+='<tr>'
        html+='<td width="91" valign="top" style="width: 68.4pt; border: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm; background: #E0E0E0">'
        html+='<p class="MsoNormal"><span style="font-family: 宋体">表名</span></p></td>'
        html+='</tr>'
        html+='</table>'
    html=html.replace(/<([^\s]+)[^>]*>/g,"<$1>")
    alert(html)
    </script>
      

  4.   

    试一试下面的代码,往TargetArea粘贴你给的样本,结果如下:
    <table class="myclass">
      <tr>
        <td>
        表名</td>
      </tr>
    </table>
    ------------------
        可能你给的样本太简单,但原理就是这样,千变万化,总能总结出共性的东西,然后替换。正则总考虑到可能标签换行,因此用了[^>](.*|\n)>的样子,确实没有换行,这样:[^>]*>就行了。<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>Prochtml</title>
    <script language="JavaScript" type="text/JavaScript">
    function ProcPaste ( obj ) {
       var cText = clipboardData.getData("text");
       cText = cText.replace ( /<table class=[^>](.*|\n)>/ig, '<table class="myclass">' );
       cText = cText.replace ( /<td width=[^>](.*|\n)>/ig, "<td>" );
       cText = cText.replace ( /<p class=[^>](.*|\n)><span style=[^>](.*|\n)>(.*)<\/span>/ig, "$3" );
       obj.value = cText;
       event.returnValue = false;
    }
    </script>
    </head>
    <body>
    <textarea name="TargetArea" cols="60" rows="12" onpaste="ProcPaste(this)"></textarea>
    </body></html>
      

  5.   

    阿信用的正规表达式可不是所有开发平台都提供的。推荐你看一下html 4.0规范,除了简单的替换外,还有开始和结束tag的匹配都是要特别注意的,w3c上有个工具叫html tidy工具,你可以参考它的源代码。
      

  6.   

    问题得到最终解决,请参阅,对各位表示感谢
    http://expert.csdn.net/Expert/topic/1990/1990824.xml?temp=.2696192