我正在尝试去除粘贴到 Telerik RadEditer 中的 MS Word 格式。不幸的是,我似乎无法让内置的格式剥离器工作。
//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...
最佳答案
这段代码似乎可以解决问题。它使用 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 检查生成的元素以检查属性是否已被删除。
关于javascript - 如何从每个标签中删除每个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249452/