JavaScript:将插入符号位置设置为第一段的开头(Opera bug)
JavaScript: set caret position to begining of first paragraph (Opera bug)
当用户按 CTRL+Home 时,在内容可编辑元素中,我试图让每个浏览器将插入符号位置移动到第一段的开头。
让我们假设整个页面都是可编辑的,除了手头的直接目标之外,我们不考虑任何其他内容。
这在Firefox,Safari和IE 10中工作正常,但Opera 12拒绝服从。这是代码...
var s = window.getSelection();
if (e.ctrlKey && e.keyCode==36)
{
var p0 = document.getElementsByTagName('p')[0];
if (p0.firstChild.nodeName.toLowerCase()=='#text')
{//<p>text
var p = p0.firstChild;
}
else if (p0.firstChild.firstChild.nodeName.toLowerCase()=='#text')
{//<p><em>text
var p = p0.firstChild.firstChild;
}
if (typeof p=='object')
{
s.getRangeAt(0).setStart(p,0);
s.getRangeAt(0).setEnd(p,0);
s.collapseToStart();
}
}
此问题是由 Opera 中段落上的 CSS 边距引起的。为什么?我完全不知道,只是这个最小的测试用例重现了它。
解决方法是主观的,边距和填充有不同的用途,在我的情况下,我无法使用填充代替边距,从而使我依赖 Opera 修复此错误。
示例.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Opera Contenteditable margin CTRL+Home/End Bug</title>
<style type="text/css">
p
{
/*margin: 0px 20px 14px 24px;*/
margin-top: 0px;
margin-right: 20px;
margin-bottom: 14px;
margin-left: 24px;
}
</style>
</head>
<body>
<div contenteditable="true">
<p>Paragraph one.</p>
<p>Paragraph two.</p>
</div>
</body>
</html>
相关文章:
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 收集一段时间内的EMG数据.建议JS
- 在一段时间内切换文本
- 如何停止字幕文本一段时间,然后继续
- HTTP服务器在一段时间后停止(Node.js)
- Hammer.js过了一段时间就停止工作了
- 在经过一段时间或满足条件后运行代码
- Meteor-在一段时间内解锁模板(按日期)
- 画布在一段时间后开始滞后
- 如何使用jquery/js/css逐步突出显示一段文本
- JS-在一段时间后水平移动图像
- AJAX 调用在获得响应并成功执行时会冻结浏览器一段时间
- 表单提交在一段时间循环PHP,jquery
- 一段时间后生成回发
- 一段时间后自动点击提交按钮
- 将字符串作为一段 HTML/javascript 代码执行
- 如何每隔一段时间更改我网站的背景颜色
- 一段时间后调用函数,但只调用一次
- 一段时间后使用Javascript加载网页ASP.net
- 在for循环中另一个音频结束后播放一段时间的音频