1

如何判断 tinyMCE 内容是否已更改?我想我会做以下事情,但是,tinymce 将每个<p>放在单独的行上。我想我可以像How to TinyMce change detect一样检查按键?,但这并不能说明最终是否有任何改变。

tinymce.init({selector: "#content"});
if($.trim(tinymce.get('content').getContent()) != $.trim($('#content').val())){alert('changed');}
4

2 回答 2

0

我会做的(如果我得到你的要求)是将原始值存储在一个变量中,并在onchange_callbackTinyMCE 提供,确定当前内容是否等于原始内容。所以

// Store the original value
var original = document.getElementById('content').value;

function myCustomOnChangeHandler(inst)
{
    // Determine if the current content of the textarea is equal to
    // the original content
    if (original.localeCompare(inst.getBody().innerHTML) === 0) {
        console.log("Hasn't changed.");
    } else {
        console.log("Changed.");
    }
}

// Initialize TinyMCE
tinymce.init({
    selector : '#content',
    onchange_callback : "myCustomOnChangeHandler"
});

如果这不起作用,请尝试使用isDirty返回布尔值的方法,以确定内容是否已更改。

于 2013-09-30T20:13:40.773 回答
0

老问题,但答案可能很有用,因为现在仍然使用 TinyMCE。

问题是当您将 HTML 内容设置为 TinyMCE 编辑器时,实际上会修改原始内容。例如,可能会反转 HTML 属性。它不会更改渲染结果的任何内容,但字符串比较不起作用。

所以我所做的只是将原始 HTML 放入一个不可见的 TinyMCE 编辑器中,然后在这个编辑器和我的“真实”编辑器之间进行比较。

<script type="text/javascript">
    tinymce.init({
       selector: 'textarea#originalContent'
    });
</script>
<textarea id="originalContent" style="display:none;"></textarea

然后在需要时触发比较。在这个例子中,我选择在每次修改我真正的 TinyMCE 编辑器的内容时​​执行它

<script type="text/javascript">
    tinymce.init({
        theme: 'modern',
        height: 500,
        width: 950,
        selector: 'textarea#tinymcePopup',
        setup: function (ed) {
            ed.on("change", function () {
                contentChanged(ed);
            })
        }
    });

    function contentChanged() {
        var originalContent = tinymce.get('originalContent').getContent();
        var editableContent = tinymce.get('tinymcePopup').getContent();
        if (originalContent != editableContent) {
            console.log('changed');
        }
        else {
            console.log('not changed');
        }
    }
</script>
 <textarea id="tinymcePopup"></textarea>
于 2016-08-19T01:46:42.007 回答