1

我让用户从随机网页复制内容并粘贴到 SharePoint 2010 RTE。他们不知道的是,他们还复制了 RTE 转换为样式化跨度标签的原始网页的样式,并且这些跨度标签覆盖了页面上的默认文本样式。粘贴后,我想自动删除任何/所有跨度标签,但保留任何剩余的标记。我意识到会有其他相关问题,但删除跨度标签将使我更接近我需要的位置。

我在这里找到了一个代码片段,它会在粘贴时删除所有标记。

//Disable the RTE paste option. Restricts to "Paste Plain Text" 
function disableMarkupPasteForRTE()
{
 Type.registerNamespace("RTE");
 if (RTE)
 {
  if(RTE.RichTextEditor != null)
  {
   RTE.RichTextEditor.paste = function() { RTE.Cursor.paste(true); }
   // Handle Ctrl+V short cut options in rich text editor
   RTE.Cursor.$3C_0 = true;
  }
 }
}

_spBodyOnLoadFunctionNames.push("disableMarkupPasteForRTE");

是否有人能够修改上述代码以仅删除跨度标签?

4

2 回答 2

0

SharePoint RTE 只不过是一个经过改进的 ContentEditable div。解决方法是在编辑器上绑定一个onpaste函数,然后直接操作html。

$(document).ready(function() {
    $(".ms-rtestate-write").bind('paste', function(e) {
        var text = $(this).html();
        $(this).html(text.replace( /<\s*span.*?>/gi,"").replace( /<\s*\/\s*span\s*.*?>/gi,""));
    });
});
于 2012-08-01T19:07:58.093 回答
0

您可以使用 Sharepoint 粘贴方法并像这样修改 html:

RTE.Cursor.$1u_0--;
RTE.Cursor.$1G_0 = true;
RTE.Cursor.$A2();
RTE.Cursor.$S_0.style.display = '';
var $v_0 = RTE.Cursor.$S_0.contentWindow.document;
var $v_1 = $v_0.body;
var $v_2 = RTE.DomHelper.createRange($v_0);
var $v_3 = new RTE.Range($v_2);
$v_3.moveToElementText($v_1);
$v_3.select();
$v_0.execCommand('paste', false, null);

html = $v_2.htmlText;
//modify the html source

//paste back your new html
$v_2.pasteHTML(newhtml);

RTE.Cursor.updateRangeToCurrentSelectionWithOptions(true);
var $v_4 = RTE.Cursor.get_range();
var $v_5 = $v_4.$1N();
$v_4.deleteContent();
$v_5.select();
RTE.Cursor.$S_0.style.display = 'none';
RTE.Cursor.$2U_0 = true;
RTE.Cursor.$28_0 = true;
RTE.Cursor.$Ei_0();
RTE.Cursor.$59();
RTE.Cursor.$A2();
window.setTimeout(RTE.Cursor.$9w, 0);
if (RTE.Cursor.$1u_0 > 0) {
    window.setTimeout(RTE.Cursor.$5p_0, 10);
}
于 2013-03-05T07:59:19.867 回答