使iframe像输入字段一样?

时间:2015-07-03 00:23:00

标签: javascript jquery iframe

我正在尝试重新创建此插件 - http://xing.github.io/wysihtml5/

我想了解他们是如何做到的,但代码很乱,所以我自己编写。

这就是我已经做过的事情 - http://codepen.io/anon/pen/EjQprM

正如你所看到的,我能够使用data-editor =“init”初始化插件,并在里面创建并附加iframe ..但是..如何使这个可写,就像一个输入?

我正在思考如何做到这一点。

非常欢迎任何帮助!

由于

代码:

var Editor = Editor || {};

(function(Editor) {

  var Editor = function(editor) {
    this.editor = editor;
    this.editorWidth = editor.width() || '100%';
    this.editorHeight = editor.height() || '100px';

    this.init();
  };

  Editor.prototype.init = function() {
    this.basicStyles();
    this.createEditor();
  };

  Editor.prototype.basicStyles = function() {
    this.editor
      .css('border-width', '1px')
      .css('border-style', 'solid')
      .css('border-color', 'grey');

    this.editor
      .css('padding-top', '10px')
      .css('padding-right', '10px')
      .css('padding-bottom', '10px')
      .css('padding-right', '10px');
  };

  Editor.prototype.createEditor = function() {
    if (this.createIframe()) {
      this.createNecessaryTagsInsideHead();
      this.createNecessaryTagsInsideBody();
    }
  };

  Editor.prototype.createIframe = function() {
    this.iframe = $('<iframe>', {
      'data-editor': 'iframe',
      'frameborder': 0,
      'scrolling': 'no',
      'width': this.editorWidth,
      'height': this.editorHeight,
      'border': '1px solid red',
      'background': 'red'
    }).appendTo(this.editor);

    this.headInsideIframe = $(this.iframe.find('head'));
    this.bodyInsideIframe = $(this.iframe.find('body'));

    if (this.iframe) {
      return true;
    } else {
      return false; 
    }
  };

  Editor.prototype.createNecessaryTagsInsideHead = function() {
    this.headInsideIframe.append('<meta charset="UTF-8" />');

  };

  Editor.prototype.createNecessaryTagsInsideBody = function() {

  };



  window.onload = function() {
    var el = $('[data-editor]');

    var editor = new Editor(el);
  };

}(Editor));

1 个答案:

答案 0 :(得分:1)

要获取可编辑的DOM元素,请将元素的contenteditable属性设置为true

所以在你的代码中,改变

<div data-editor="init"></div>

<div data-editor="init" contenteditable="true"></div>

然后用户可以编辑div的内容!