问题的旧版本如下,在研究了更多之后,我决定重新解释这个问题。像以前一样的问题是,我需要在没有突出显示文本的情况下关注一个可信的div,直接进行焦点突出显示Chrome中的文本。
我意识到人们通过重置textarea中的插入位置来解决textareas中的这个问题。我怎么能用一个满足的元素来做到这一点?我试过的所有插件只适用于textareas。感谢。
问题的老措辞:
我有一个令人满意的元素 我想集中注意力,但仅限于此 将光标放在前面 元素,而不是选择 一切。
带有jquery的
elem.trigger('focus');
选择整个文本中的所有文本 铬中的元素。 Firefox表现得很好 正确地,将插入符号设置为 前面的文字。我怎样才能得到 Chrome可以按我想要的方式运行,或者是 也许不是我正在寻找的重点 对
谢谢大家。
答案 0 :(得分:29)
也许我误解了这个问题,但是不会做以下事情(假设一个可编辑的<div>
带有ID“可编辑”)?计时器就在那里,因为在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();
答案 1 :(得分:20)
演示: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>
答案 2 :(得分:3)
是的,因为你已经使用了
elem.trigger('focus');
尝试使用类或标识要触发触发事件的元素。
答案 3 :(得分:1)
我在围绕DOM讨论之后设法解决了这个问题。
elm.focus();
window.getSelection().setPosition(0);
它可能只适用于WebKit浏览器,但由于它是问题的唯一来源,我添加了一个条件(使用jQuery)
if(!$.browser.webkit) {
elm.focus();
} else {
elm.focus();
window.getSelection().setPosition(0);
}
希望这能解决你的问题。
答案 4 :(得分: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>