在 JavaScript X-Editable 字段中将 Markdown 解析为 HTML

Parse Markdown into HTML in JavaScript X-Editable field

我正在字段上使用 jQuery X-Editable 就地编辑库和 JavaScript 标记的 Markdown 解析器库来尝试将 Markdown 字符串转换为 HTML。

目标是展示HTL,当它变成一个textarea编辑字段,然后如何降价。 Markdown 将是在实时应用程序中从后端保存和加载的内容。

我已经为此功能设置了一个 JSFiddle 演示...

http://jsfiddle.net/jasondavis/bfrrzz8h/

如果您查看演示并单击以编辑描述文本并粘贴此 Markdown 字符串 # Marked in browser\n\nRendered by **marked** 并单击保存,它会提醒您已解析的 markdown 为 HTML 字符串。问题是它没有更新 DOM 来显示新的 HTML 字符串。

这方面有什么帮助吗?

标记的图书馆 - https://github.com/chjj/marked
X-可编辑库 - https://github.com/vitalets/x-editable/


JavaScript 来自我的演示

$('#task-description-modal').editable({
    type: 'textarea', // text|textarea|select|date|checklist
    url: '/updatetask',
    pk: 123,
    toggle: 'click', // click|dblclick|mouseenter|manual
    inputclass: 'task_description resizable',
    highlight: '#F1FFE7',
    mode: 'inline', // inline | popup
    placement: 'top',
    title: 'Enter Task Description',
    validate: function(value) {
        if ($.trim(value) === '') {
            return 'Task Description is Required';
        }
    },
    params: function(params) {
        //Addition params in addition to the default: pk, name, value
        return params;
    },
    success: function(response, newValue) {
        if (!response.success) return response.msg;
    }
});


$('#task-description-modal').on('save', function(e, params) {
    // Parse Description Markdown into HTML
    var markdownDescription = marked(params.newValue);
    alert(markdownDescription);
    $('#task-description-modal').html(markdownDescription);
    //$('#task-description-modal').html('test');
});


//ajax emulation. Type "err" to see error message
$.mockjax({
    url: '/updatetask',
    responseTime: 400,
    response: function(settings) {
        if(settings.data.value == 'err') {
           this.status = 500;  
           this.responseText = 'Validation error!';
        } else {
           this.responseText = '';  
        }
    }
}); 

您正在将已编译的 HTML 注入到您用于获取降价输入的元素中。这简直是​​在为失败做好准备:有两个元素,一个用于降价文本,一个用于显示结果,并在两者之间切换。

例如,下面的代码已经可以正常工作了:

HTML:

<div style="margin: 50px">
  <span id="task-description-modal">Task Description text</span>
  <div id="processed"></div>
</div>

JS:

$('#task-description-modal').on('save', function(e, params) {
  var markdownDescription = marked(params.newValue);
  $('#processed').html(markdownDescription);
});

您只需要确保根据用户刚刚完成的操作只显示您打算显示的元素。隐藏 #task-description-modal 直到用户点击 #processed,此时你隐藏 #processed 并强制 .focus()#task-description-modal?完美。