summernote得到我的id textarea

时间:2016-03-25 11:37:58

标签: javascript summernote

我在bootstrap上使用带有summernote的自定义按钮,通过以下操作:

  • 点击自定义按钮(已完成)
  • 打开带有ajax内容的模态(已完成)
  • 用户选择了一个项目(完成)
  • 模态调用回调按钮参数和关闭(完成)
  • textarea中的函数回调插入链接(已完成)

那么,出了什么问题?

我想在回调函数中获取textarea id,以便具有动态性(参见最后一个函数)。

问题:我可以从上下文中获取textarea id吗?用另一种方式? (我在console.log(context)中找不到它;)

问题2:如何获得光标位置?我的链接被添加到第一位。

var summernote = {

    run: function(id, type) {
        if(type && type === 'full') {
            this.full(id);
        } else {
            this.simple(id);
        }
    },

    simple: function(id) {
        // todo
    },

    full: function(id) {
        var summernote_params = { height:300,
                                  lang: 'fr-FR',
                                  toolbar: [
                                            ['misc', ['undo', 'redo']],
                                            ['style', ['bold', 'italic', 'underline', 'clear']],
                                            ['font', ['superscript', 'subscript']],
                                            ['para', ['ul', 'ol']],
                                            ['mybuttons', ['docimage', 'docdocument']],
                                           ],
                                  buttons: { 
                                             docimage: summernote.docImage,
                                             docdocument: summernote.docDocument,
                                           }, 
                                };
        $('#'+id).summernote(summernote_params);
    },

    docImage: function(context) {
        var ui = $.summernote.ui;
        var button = ui.button({
            contents: '<i class="fa fa-file-image-o"></i>',
            tooltip: 'Insert image',
            click: function () {
                documents.run({filter:'image', callback:[summernote.docImageCallback, context]});
            }
        });
        return button.render();
    },

    docImageCallback: function(context, doc) {
        context.invoke('editor.insertImage', doc.url);
    },

    docDocument: function(context) {
        var ui = $.summernote.ui;
        var button = ui.button({
            contents: '<i class="fa fa-file-o"></i>',
            tooltip: 'Insert file',
            click: function () {
                documents.run({filter:'document', callback:[summernote.docDocumentCallback, context]});
            }
        });
        return button.render();
    },

    docDocumentCallback: function(context, doc) {
        // here i want to get id dynamically
        $('#description').summernote('createLink', {
          text: doc.name,
          url: doc.url,
          newWindow: true
        });
    },

}

和电话

<textarea id="description"></textarea>
<script>
summernote.run('description', 'full');
</script>

1 个答案:

答案 0 :(得分:1)

所以我找到了解决每个问题的方法。

init中的params在上下文中是senndnd。要在上下文中获取id,我只需在init中添加它:

var summernote = {

...

full: function(id) {
    var summernote_params = { id: id,   // <-- set id in context, (cutsom data)
                              height: 300,
                              lang: 'fr-FR',
                              toolbar: [
                                        ['misc', ['undo', 'redo']],
                                        ['style', ['bold', 'italic', 'underline', 'clear']],
                                        ['font', ['superscript', 'subscript']],
                                        ['para', ['ul', 'ol']],
                                        ['mybuttons', ['docimage', 'docdocument']],
                                       ],
                              buttons: { 
                                         docimage: summernote.docImage,
                                         docdocument: summernote.docDocument,
                                       }, 
                            };
    $('#'+id).summernote(summernote_params);
},

...

docDocumentCallback: function(context, doc) {
    var id = context.options.id;   // <-- get id from context
    $('#'+id).summernote('createLink', {
      text: doc.name,
      url: doc.url,
      newWindow: true
    });
},

}

要保持光标位置与外部调用,只需保存位置,并将其设置在回调函数中:

var summernote = {

...

docDocument: function(context) {
    var ui = $.summernote.ui;
    var button = ui.button({
        contents: '<i class="fa fa-file-o"></i>',
        tooltip: app_i18n.summernote_document,
        click: function () {
            context.invoke('editor.saveRange');  // <-- save position cursor
            documents.run({filter:'document', callback:[summernote.docDocumentCallback, context]});
        }
    });
    return button.render();
},

docDocumentCallback: function(context, doc) {
    context.invoke('editor.restoreRange');  // <-- set position cursor to the last save
    if(context.options.id) {
        $('#'+context.options.id).summernote('createLink', {
          text: doc.name,
          url: doc.url,
          newWindow: true
        });
    }
},

}