1

text-DIV を編集可能にするときに、 setEndOfContenteditable 関数を使用してカーソルをテキストの末尾に置きます。

//Insert cursor at end of contentEditable element
function setEndOfContenteditable(contentEditableElement)
{
    var range,selection;
    if(document.createRange)//Firefox, Chrome, Opera, Safari, IE 9+
    {
        range = document.createRange();//Create a range (a range is a like the selection but invisible)
        range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
        range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
        selection = window.getSelection();//get the selection object (allows you to change selection)
        selection.removeAllRanges();//remove any selections already made
        selection.addRange(range);//make the range you have just created the visible selection
    }
    else if(document.selection)//IE 8 and lower
    { 
        range = document.body.createTextRange();//Create a range (a range is a like the selection but invisible)
        range.moveToElementText(contentEditableElement);//Select the entire contents of the element with the range
        range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
        range.select();//Select the range (make it the visible selection
    }
}

以前は div が 1 つしかなく、その中にテキストがあった場合、これは完全に機能します。

setEndOfContenteditable(curObj);

curObj は、テキストを含む DIV です。

現在、curObj -div をフレームとしてのみ保持し、実際のテキストを含む DIV をその中に配置するデザインに切り替えました。通常、jQueryコードの内側のdivに到達(選択)するためにこれを行います

var curObj = window.curObj;
var inner = '#' + $(curObj).attr("id") + ' .object_inner';
$(inner).doAllMyStuff;

ただし、この特定の setEndOfContenteditable 関数では機能しません。エラーは次のとおりです。

Uncaught Error: NotFoundError: DOM Exception 8 

エラーは setEndOfContenteditable 関数の 7 行目を示しています。

range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
4

1 に答える 1

0

ああ、jQuery セレクターをプレーンな JavaScript 関数 (生の DOM 要素が必要) に渡そうとしていました。これは生の DOM 要素を取得する 1 つの解決策です。

var spec = $(curObj).find('.object_inner');
setEndOfContenteditable(spec[0]);

この人に特に感謝します: How to get a DOM Element from a JQuery Selector

于 2013-10-02T13:11:55.507 に答える