RadEditor在从HTML切换到Design时不断删除标记,如何阻止它

时间:2014-10-15 01:03:59

标签: javascript c# html telerik radeditor

我在我的项目中使用RadEditor,但是当我插入HTML编辑区域的顶部然后将视图切换到Design并返回时。标签已删除。我想在不修改过多现有过滤器的情况下停止RadEditor这样做。

您可以在以下链接中尝试此操作

http://demos.telerik.com/aspnet-ajax/editor/examples/contentfilters/defaultcs.aspx

1 个答案:

答案 0 :(得分:1)

问题是您使用DIV模式而不是iFrame模式。如果您想使用DIV模式,问题是该页面中已存在doctype,head,footer等。在页面中不能存在两次,浏览器会将其从页面中删除。

您可以使用iFrame模式或下面的解决方案。

我使用的解决方案是用我的自定义标签替换该标签,当我从设计模式转到编辑模式时,我将其替换,当我将其保存到数据库时,我也将自定义标签替换为普通标签。例如:

以下代码是我在项目中使用的示例(尚未包含doctype):

// Add the custom filter to the editor
function OnClientLoad(editor, args) {
    editor.get_filtersManager().add(new MyFilter());
}

// Replace the tags HTML does not expect twice
var tags = ["html", "body", "head", "title", "form", "textarea"];

MyFilter = function () {
    MyFilter.initializeBase(this);
    this.set_isDom(false);
    this.set_enabled(true);
    this.set_name("RadEditor filter");
    this.set_description("RadEditor filter description");
}

MyFilter.prototype =
{
    getHtmlContent: function (content) {
        var newContent = content;

        for (var i = 0; i < tags.length; i++) {
            var tag = tags[i];
            newContent = newContent.replace(new RegExp("<j" + tag, "gi"), "<" + tag);
            newContent = newContent.replace(new RegExp("<" + "/j" + tag + "", "gi"), "<" + "/" + tag + "");
        }

        return newContent;
    },
    getDesignContent: function (content) {
        var newContent = content;
        for (var i = 0; i < tags.length; i++) {
            var tag = tags[i];
            newContent = newContent.replace(new RegExp("<" + tag, "gi"), "<j" + tag);
            newContent = newContent.replace(new RegExp("<" + "/" + tag + "", "gi"), "<" + "/j" + tag + "");
        }
        return newContent;
    }
}
MyFilter.registerClass('MyFilter', Telerik.Web.UI.Editor.Filter);

从编辑器中获取HTML也会替换新标记:

function GetEditorHtmlCall() {
    var html = $find("RadEditor1").get_html(true);

    for (var i = 0; i < tags.length; i++) {
        var tag = tags[i];
        html = html.replace(new RegExp("<" + tag, "gi"), "<j" + tag);
        html = html.replace(new RegExp("<" + "/" + tag + "", "gi"), "<" + "/j" + tag + "");
    }

    return html;
}

上面的代码将取代下面的示例。在设计模式中你有一个jhtml标签,在html模式下你有你的html标签。当你保存它时,你将jhtml标签转换回html,所以它在数据库中很好:

<html></html> to <jhtml></jhtml>

希望这能为您提供所需的解决方案。