CKEDITOR - 删除过滤器中的标签

时间:2015-04-15 16:03:16

标签: ckeditor

对于此示例标记:

<p>Hello <span class='blah'>John</span>, how are you?</p>

我正在尝试创建一个检测blah类的过滤器,只留下名称John,删除跨度。这是我的过滤器:

    var rules = {
        elements: {
            span: function(element) {
                if (element.hasClass("blah")) {
                    var text = element.children[0].value;
                    return text;
                }
            }
        }
    };

以下是我的示例代码:

    var filter = new CKEDITOR.htmlParser.filter(rules);
    var fragment = CKEDITOR.htmlParser.fragment.fromHtml(text);
    var writer = new CKEDITOR.htmlParser.basicWriter();
    filter.applyTo(fragment);
    fragment.writeHtml(writer);
    var results = writer.getHtml();
    console.log(results);

这是JSFiddle which demonstrates the issue

2 个答案:

答案 0 :(得分:1)

要使其正常工作,您需要返回CKEDITOR.htmlParser.text的实例,而不是返回字符串。但是有一种更简单的方法:

var rules = {
    elements: {
        span: function(element) {
            if (element.hasClass("blah")) {
                delete element.name;
            }
        }
    }
};

瞧! <span>标记已被删除,但其内容已被删除。

答案 1 :(得分:0)

显然,诀窍是将name和class属性都设置为空字符串。这是updated fiddle。这是过滤器:

var filter = new CKEDITOR.htmlParser.filter({
    elements: {
        span: function(element) {
            if (element.hasClass("blah")) {
                element.name = "";
                element.attributes.class = "";
                return element;
            }
        }
    }
});