2

ユーザーがCTRL+Homeを押したときのコンテンツ編集可能な要素で、すべてのブラウザーにキャレット位置を最初の段落の先頭に移動させようとしています。

ページ全体が編集可能であり、目前の直接の目標以外は考慮していないと仮定しましょう。

これはFirefox、Safari、IE 10で正常に機能していますが、Opera12は従うことを拒否しています。これがコードです...

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();
 }
}
4

1 に答える 1

0

この問題は、Operaの段落のCSSマージンが原因で発生します。なんで?この最小限のテストケースがそれを再現しているというだけで、私にはまったくわかりません。

回避策は主観的なものであり、マージンとパディングにはさまざまな用途があり、私の状況ではマージンの代わりにパディングを利用できないため、Operaがこのバグを修正することに依存しています。

example.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>
于 2012-06-24T21:16:28.663 に答える