插入HTML / Text @ Cursor Inline Div(NicEdit)

时间:2011-07-11 14:54:01

标签: javascript jquery wysiwyg editing inject

所以我除了NicEdit之外还没有找到任何其他的inline-div编辑jquery / javascript软件。我想在我的光标所在的div中注入一个制表符或任何html。我在这里偶然发现了一些代码:

function insertAtCursor(editor, value){
    var editor = nicEditors.findEditor(editor);
    var range = editor.getRng();                    
    var editorField = editor.selElm();
    editorField.nodeValue = editorField.nodeValue.substring(0, range.startOffset) +
                            value +
                            editorField.nodeValue.substring(range.endOffset, editorField.nodeValue.length);

}

但是,如果光标正好在左侧(没有输入文本,就在行的开头),则它不起作用(nodeValue变为null)。此外,当输入文本时,光标会在多个浏览器中跳转(比较Chrome和Firefox)。

是否有WYSIWYG支持内联选项卡(制表符按钮)或文本注入Divs(或模仿div的textareas?)为什么这么难找?

5 个答案:

答案 0 :(得分:0)

我发现的最好的内联编辑器是Google的WYSIWYG,它是他们的开源JavaScript库的一部分,名为Closure Library:http://code.google.com/intl/sv-SE/closure/library/

不幸的是,设置并不是很容易,而且没有那么详细记录,但如果你设法启动并运行它具有与Gmail编辑器或Google Sites编辑器大致相同的功能,那么浏览器兼容性很好,一个不错的内联功能。

答案 1 :(得分:0)

以下代码修复了有关注入div或其他html元素以及编辑器中没有任何文本的问题:

if(editorField.nodeValue==null){
  editor.setContent('<strong>Your content</strong>');
}else{        
  editorField.nodeValue = editorField.nodeValue.substring(0, range.startOffset) +
                          '<strong>Your content</strong>' +
                          editorField.nodeValue.substring(range.endOffset, editorField.nodeValue.length);
  editor.setContent(editorField.nodeValue);
}

答案 2 :(得分:0)

请参阅我的回答HERE。这是我创建的插件,用于在光标位置插入html,对我来说效果很好。

答案 3 :(得分:0)

首先检查Null节点然后设置该特定节点(editorField值)

    var editor = nicEditors.findEditor("cpMain_area2");
    var range = editor.getRng();            
    var editorField = editor.selElm();
   if (editorField.nodeValue == null) {
        editorField.setContent('<DIV><'+  A +'></DIV>')
         }
    else {

        editorField.nodeValue = editorField.nodeValue.substring(0, range.startOffset) + A + editorField.nodeValue.substring(range.endOffset, editorField.nodeValue.length);
       }

答案 4 :(得分:-1)

首先检查Null节点然后设置该特定节点

if (editorField.nodeValue == null) {
    editorField.setContent(DataFieldValue);
}