5

重複の可能性:
テキストエリアでキャレットの位置を取得するには?

html textarea コントロールの任意の場所に * と入力すると、 のようなキーアップ イベントで現在の位置を取得する必要があり"Welcome* to jQuery"ます。だから私は * ウェルカムの後に8番目の位置を意味します。誰かがこれについて私を助けることができるかどうか教えてください.

4

2 に答える 2

5

これは機能します。(注: 引用符付きの場合は 8 で、そうでない場合は 7 です)

$("#tf").on('keyup', function(){
    console.log($(this).val().indexOf('*'));
});​

http://jsfiddle.net/Vandeplas/hc6ZH/

更新:複数*のソリューション

$("#tf").on('keyup', function(){
    var pos = [],
        lastOc = 0,
        p = $(this).val().indexOf('*',lastOc);

    while( p !== -1){
        pos.push(p);
        lastOc = p +1;
        p = $(this).val().indexOf('*',lastOc);
    }
    console.log(pos);
});​

http://jsfiddle.net/Vandeplas/hc6ZH/1/

更新:入力した * char の位置のみを指定する

(function ($, undefined) {
    $.fn.getCursorPosition = function() {
        var el = $(this).get(0);
        var pos = 0;
        if('selectionStart' in el) {
            pos = el.selectionStart;
        } else if('selection' in document) {
            el.focus();
            var Sel = document.selection.createRange();
            var SelLength = document.selection.createRange().text.length;
            Sel.moveStart('character', -el.value.length);
            pos = Sel.text.length - SelLength;
        }
        return pos;
    }
})(jQuery);

$("#tf").on('keypress', function(e){
    var key = String.fromCharCode(e.which);
    if(key === '*') {
        var position = $(this).getCursorPosition();
        console.log(position);
    } else {
        return false;
    }
});​

http://jsfiddle.net/Vandeplas/esDTj/1/

于 2012-10-09T07:43:56.690 に答える
1

以下のリンクは、jQuery自体を使用してこれを解決するのに役立ちました。

テキストエリア内のカーソル位置 (x/y 座標ではなく、文字インデックス)

皆さんの努力に感謝します。

于 2012-10-09T08:59:01.243 に答える