2014-04-08 116 views
0

我想找出一种方法将粘贴HTML内容的样式属性删除到CKEditor实例中。我使用以下方法完全删除样式属性,但实际上我想保留margin-left属性。CKEditor:从粘贴内容中删除样式属性

CKEDITOR.on('instanceReady', function(ev) { 
    ev.editor.on('paste', function(evt) { 
     if (evt.data.type == 'html') { 
      evt.data.dataValue = evt.data.dataValue.replace(/ style=".*?"/g, ''); 
     } 
    }, null, null, 9); 
}); 

问题是,有时余裕只是切换到保证金速记和额外的数据,我不希望被添加到该。

我正在研究jQuery和Javascript方法来尝试完成此操作,但我还没有取得任何成功。

回答

0

您可以将正确配置的允许的内容过滤器应用于粘贴的数据。请参阅此答案以了解如何将其应用于字符串:Apply CKEditor Advanced Content Filter to a string

您可能遇到的唯一问题是您无法告诉ACF允许所有元素及其属性,您必须指定元素。因此,过滤器可能看起来像这样:

var filter = new CKEDITOR.filter(
    'p h1 h2 h3 img strong em ul ol li[*](*){margin-left}' 
); 

它将使所有属性和类别,但仅限于这些元素margin-left


编辑

这里有一个简单的方法来列出所有元素:

var filter = new CKEDITOR.filter({ 
    '$1': { 
     // Use the hash containing all correct HTML elements 
     // (plus some more things, but we can ignore them in this case). 
     elements: CKEDITOR.dtd, 
     attributes: true, 
     classes: true, 
     styles: 'margin-left' 
    } 
}); 
+0

威尔仅适用于内容粘贴吗?一旦它在编辑器中,可能会有其他样式应用于内容。我只是想在粘贴之前将其过滤掉。 – Sean

+0

我刚才展示了如何将独立过滤器应用于HTML字符串。如果你在粘贴事件监听器中这样做,那只会影响粘贴的内容。 – Reinmar

+0

这工作得很好,但我想出了一个jQuery解决方案来代替。当内容被粘贴时,保证金不会被设置。它使用边距:x x x x短手。我只需要从左边的值,但CKEDITOR过滤器一起拉出边距。 – Sean