在 Chrome中 输出:
<div id="content" contenteditable="true" style="border:1px solid #000;width:500px;height:40px;">
hey
<div>what's up?</div>
<div>
<button id="insert_caret"></button>
我相信在 FF中 它将看起来像这样:
hey
<br />
what's up?
并在 IE中 :
hey
<p>what's up?</p>
不幸的是,没有一种很好的方法可以使每个浏览器都插入一个<br />
而不是div标签或p标签,或者至少我在网上找不到任何东西。
无论如何,我现在想做的是,当我按下 按钮时 ,我希望将插入符号设置在文本的末尾,因此它应该看起来像这样:
hey
what's up?|
有什么办法可以使其在 所有浏览器中 正常工作?
例:
$(document).ready(function()
{
$('#insert_caret').click(function()
{
var ele = $('#content');
var length = ele.html().length;
ele.focus();
//set caret -> end pos
}
}
以下功能将在所有主流浏览器中实现:
function placeCaretAtEnd(el) {
el.focus();
if (typeof window.getSelection != "undefined"
&& typeof document.createRange != "undefined") {
var range = document.createRange();
range.selectNodeContents(el);
range.collapse(false);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (typeof document.body.createTextRange != "undefined") {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(false);
textRange.select();
}
}
placeCaretAtEnd( document.querySelector('p') );
p{ padding:.5em; border:1px solid black; }
<p contentEditable>foo bar </p>
在开始时将插入符几乎相同:只需要更改传递给的调用中的布尔值即可collapse()
。这是一个示例,该示例创建用于将插入号放在开头和结尾的函数:
function createCaretPlacer(atStart) {
return function(el) {
el.focus();
if (typeof window.getSelection != "undefined"
&& typeof document.createRange != "undefined") {
var range = document.createRange();
range.selectNodeContents(el);
range.collapse(atStart);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (typeof document.body.createTextRange != "undefined") {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(atStart);
textRange.select();
}
};
}
var placeCaretAtStart = createCaretPlacer(true);
var placeCaretAtEnd = createCaretPlacer(false);
问题内容: 我有一个contenteditable div,需要在插入符号的位置插入文本, 可以通过IE在IE中轻松完成此操作 在Firefox / Chrome中有类似的实现方式吗? 谢谢! 问题答案: 以下功能将在插入符号位置插入文本,并删除现有选择。它适用于所有主流桌面浏览器: 更新 基于注释,下面是一些用于保存和还原选择的代码。在显示上下文菜单之前,应该将返回值存储在一个变量中,然后在隐藏
Ruby我已经开始在我的Ruby代码中插入不可编辑的文本,我觉得这很烦人。例如,这个简单的rSpec表达式: ...变成了这样: 另一个例子是: ...变成了这样: 如何关闭此功能?
作为我的应用程序的一部分,我有一个简单的屏幕来输入文本。当焦点在EditText中时,它永远不会接收制表符。 我按下虚拟键盘上的tab键,但行为是键盘消失了。 这是我的布局: 有问题的控件是最后一个EditText,因为它是多行的,带有滚动。 我需要提供这一点,以便用户可以做一些(非常)基本的格式化。 有什么想法吗?
问题内容: 我需要将插入符号移动到节点的末端,例如在Gmail注释小部件上。 我在StackOverflow上阅读了线程,但是这些解决方案基于使用输入,并且不适用于元素。 问题答案: 还有另一个问题。 如果的解决方案工作DIV不包含其他元素multilined。 例如,如果一个div包含其他div,而这些其他div里面包含其他内容,则可能会出现一些问题。 为了解决这些问题,我安排了以下解决方案,它
vue项目中使用了富文本编辑器quill v1.3.7,然后写了自定上传相关业务代码,由于需要支持大文件上传,所以自定义里面做了分片上传逻辑,分配上传完成后,最后调用接口返回文件地址等信息,拿到信息后,需要插入到quill富文本编辑器中,这个测试下来没什么问题,但是当插入大文件时,通过 如上代码插入视频却总是报错,通过调试发现that.editor.getSelection()返回null,但是上
在IntelliJ中,我们可以使用Alt Shift Insert在每行的同一位置进行多行编辑。当每行的长度不同时,我们可以在每行的末尾进行多行编辑吗?使用场景是在每行末尾编辑分号。 谢谢。