Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从每个标记中删除每个属性?_Javascript_Jquery_Html_Internet Explorer 8_Internet Explorer 7 - Fatal编程技术网

Javascript 如何从每个标记中删除每个属性?

Javascript 如何从每个标记中删除每个属性?,javascript,jquery,html,internet-explorer-8,internet-explorer-7,Javascript,Jquery,Html,Internet Explorer 8,Internet Explorer 7,我正试图将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 uncomment

我正试图将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…

这段代码似乎起到了作用。它使用一个
safeAttrs
数组,使更新想要保留的属性列表变得更容易。您可以通过
.removeAttr()
传递要删除的属性的空格分隔列表,因此不需要逐个循环属性名称

最后,不同的浏览器可能会以不同的方式处理属性(例如,Chrome以小写形式存储所有属性,因此“dataFld”存储为“dataFld”),因此最好使用
.toLowerCase()

var safeAttrs=[“datasrc”、“implementation”、“datafld”、“dataformatas”、“nofocusrect”、“datetime”、“cite”];
$('html*')。每个(函数(){
var attrs=$.map(this.attributes,函数(attr){
if($.inArray(attr.nodeName.toLowerCase(),safeAttrs)<0){
返回attr.nodeName;
}else{return null;}
});
$(this.removeAttr(attrs.join(“”));
});
。使用Chrome或Firebug检查生成的元素,以检查属性是否已被删除。

我想我有了它

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());​
var html=editor.get_html();
var parent=$('').html(html);
$(父).find('*').each(函数(){
var attr=$.map(this.attributes,函数(项){
返回item.name;
});
var tag=$(这个);
$。每个(属性、功能(i、项){
标记移除标记(项目);
});
});
set_html(parent.html());​


不幸的是,我的RadEditor仍然有问题,但这是正常的。

尝试
返回项。改为nodeName
。你知道在哪一行出现错误吗?nodeName给出了相同的错误,jquery-1.7.2.jsTry的第2764行
$(html)。contents()
而不是
$('*',html)
。不确定最理想的方法是什么,但是您可以随时获取原始html并使用正则表达式对其进行修改。在DOM中修改原始html并不总是理想的…但是,在循环中反复检查每个ATIBUTE和调整DOM树也可能不是最好的。谢谢Jack,我想我可以将您的safeAttrs合并到我的解决方案中。
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());​