質問の古いバージョンは以下のとおりです。さらに調査した後、質問を言い換えることにしました。以前の問題は、テキストをハイライトせずにコンテンツ編集可能なdivにフォーカスする必要があることです。Chromeでテキストをまっすぐフォーカスしてハイライトします。
テキストエリアのキャレット位置をリセットすることで、テキストエリアのこの問題を解決したことを実感しています。 contenteditable要素を使用してこれを行うにはどうすればよいですか?私が試したすべてのプラグインは、テキストエリアでのみ動作します。ありがとう。
質問の古いフレーズ:
フォーカスしたいコンテンツ編集可能な要素がありますが、すべてを選択するのではなく、要素の前面にカーソルを置く場合に限ります。
elem.trigger('focus');
with jqueryは、chromeの要素全体のすべてのテキストを選択します。 Firefoxは正しく動作し、テキストの前にキャレットを設定します。どうすればChromeを取得して希望どおりに動作させることができますか。
皆さんありがとう。
demo: http://so.lucafilosofi.com/jquery-setting-cursor-position-in-contenteditable-div/ =
<div id="editable" contentEditable="true">
<h2>Lorem</h2> <p>ipsum dolor <i>sit</i>
amet, consectetur <strong>adipiscing</strong> elit.</p> Aenean.
</div>
<script type="text/javascript">
$(function () {
$('[contentEditable="true"]').on('click', function (e) {
if (!$(this).hasClass('editing')) {
var html = $(this).html();
if (html.length) {
var range = rangy.createRange();
$(this).toggleClass('editing').html('<span class="content-editable-wrapper">' + html + '</span>');
var $last = $(this).find('.content-editable-wrapper');
range.setStartAfter($last[0]);
range.collapse(false);
rangy.getSelection().setSingleRange(range);
}
}
}).on('blur', function () {
$(this).toggleClass('editing').find('.content-editable-wrapper').children().last().unwrap();
});
});
</script>
たぶん私は質問を誤解しているかもしれませんが、次のことはしません(編集可能な<div>
id "editable")? Chromeでは、要素全体を選択するネイティブブラウザーの動作がfocus
イベントの後にトリガーされるように見えるため、タイマーがあります。これにより、フォーカスイベントの後まで延期しない限り、選択コードの効果がオーバーライドされます。
var div = document.getElementById("editable");
div.onfocus = function() {
window.setTimeout(function() {
var sel, range;
if (window.getSelection && document.createRange) {
range = document.createRange();
range.selectNodeContents(div);
range.collapse(true);
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(div);
range.collapse(true);
range.select();
}
}, 1);
};
div.focus();
はい、それはあなたが使ったから起こります
elem.trigger('focus');
クラスを使用するか、トリガーイベントを発生させたい要素を特定してください。
DOMを少し突っ込んだ後、なんとかその問題を解決できました。
Elm.focus();
window.getSelection().setPosition(0);
おそらくWebKitブラウザでのみ機能しますが、問題の唯一の原因であるため、条件を追加しました(jQueryを使用)
if(!$.browser.webkit) {
Elm.focus();
} else {
Elm.focus();
window.getSelection().setPosition(0);
}
これで問題が解決することを願っています。
Preまたはdivタグにポインターの位置を設定します。
function setCursor(pos) {
var el = document.getElementById("asd");
var range = document.createRange();
var sel = window.getSelection();
range.setStart(el.childNodes[0], pos);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
el.focus();
}
$('button').click(function () {
setCursor(5);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="asd" contenteditable="true" >
asd
two
</div>
<button>Set caret position</button>