我正在尝试将粘贴上的MS Word格式删除到Telerik RadEditer中。不幸的是,我似乎无法使内置格式剥离器工作。
//performing paste
var editor = $find("radEditor1");
editor.setFocus();
var rng = editor.getSelection().getRange();
rng.execCommand("Paste", null, false);
//does nothing! (even when uncommented)
//editor.fire("FormatStripper", {value: "MSWordRemoveAll" });
所以我认为我可以利用jQuery将所有属性串起来,这可能正是我所需要的。
//fixing content
var html = editor.get_html();
$("*", html).each(function(){
var attr = $.map(this.attributes, function(item){
return item.name;
});
var node = $(this);
$.each(attr, function(i, item){
//added a filter for crazy Error
if(item != "dataSrc" &&
item != "implementation" &&
item != "dataFld" &&
item != "dataFormatAs" &&
item != "nofocusrect" &&
item != "dateTime" &&
item != "cite")
node.removeAttr(item);
});
});
editor.set_html(html);
此功能完成后,我的html变量没有更新html ...
答案 0 :(得分:1)
这段代码似乎可以解决问题。它使用safeAttrs
数组来更新您想要保持的属性列表。您可以传递.removeAttr()
空格分隔的属性列表以进行删除,因此您无需逐个遍历属性名称。
最后,不同的浏览器可能会以不同的方式处理属性(例如,Chrome会将所有属性存储为小写,因此'dataFld'存储为'datafld'),因此最好使用.toLowerCase()
将其全部归一化
var safeAttrs = ["datasrc","implementation","datafld","dataformatas","nofocusrect","datetime","cite"];
$('html *').each(function() {
var attrs = $.map(this.attributes,function(attr) {
if($.inArray(attr.nodeName.toLowerCase(),safeAttrs) < 0) {
return attr.nodeName;
} else { return null; }
});
$(this).removeAttr(attrs.join(' '));
});
jsFiddle DEMO。使用Chrome或Firebug检查生成的元素,以检查属性是否已被删除。
答案 1 :(得分:0)
我想我拥有它。
var html = editor.get_html();
var parent = $('<div></div>').html(html);
$(parent).find('*').each(function(){
var attr = $.map(this.attributes, function(item){
return item.name;
});
var tag = $(this);
$.each(attr, function(i, item){
tag.removeAttr(item);
});
});
editor.set_html(parent.html());
不幸的是,我的RadEditor仍然存在问题,但这是正常的。