2016-03-18 11 views
0

この機能が見つかり:挿入するテキスト - 現在クリックされた要素の中に挿入していないテキストフィールド

function insertTextAtCursor(text) { 
    var sel, range, html; 
    sel = window.getSelection(); 
    range = sel.getRangeAt(0); 
    range.deleteContents(); 
    var textNode = document.createTextNode(text); 
    range.insertNode(textNode); 
    range.setStartAfter(textNode); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
} 

を私はコンテンツの編集可能なdiv要素とdivのにイメージタグを追加するように設定ボタンがあります。

ただし、フィドルごとに、ボタンはdivにではなくテキストを自分自身に追加します。

助けが必要ですか?

https://jsfiddle.net/e859j9an/

+0

window.getSelection()は、選択されたテキストを要素から取得するために使用されます。あなたのソースは選択と同じなので、同じ要素にtextnodeを追加することになります。ボタンをクリックするだけで画像タグをdivに追加しますか? – DinoMyte

答えて

0

EDIT:あなたはのcontentEditable divでクリックしたとき、私はそれを行うための方法を見つける:

See this fiddle私はこのコードを使用してJSを更新した

$(function() { 
    /* Text editor */ 
    $(".custom-text-editor").on('click', function(){ 
    insertTextAtCursor('this text'); 
    }); 
}); 

function insertTextAtCursor(text) { 
    var sel, range, html; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.deleteContents(); 
      range.insertNode(document.createTextNode(text)); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     document.selection.createRange().text = text; 
    } 
} 

ボタンをクリックしたときにdiv.custom-text-editorで正しい位置を取得できるかどうかはわかりません..

+0

こんにちは、おかげで、カーソルポイントでテキストを簡単に挿入できるようにしたい。ミディアムスタイルのテキストエディタで作業していますが、現在はテキストが挿入されていますが、最終的に画像アップローダになります。 – Lovelock

+0

私は編集しましたが、divでクリックする以外のボタンをクリックすると、contenteditable divの正しい位置を得ることができません –

0

これは、別の要素をクリックすると、contenteditable divがフォーカスを失うからです。

このようにコードを変更してください。

$(".custom-text-editor").focus(); 
$(".insert-image").on('mousedown', function(e){ 
insertTextAtCursor("this is an image"); 
return false; 
});