2012-06-22 3 views
2

В элементе contenteditable, когда пользователь нажимает CTRL + Home Я пытаюсь, чтобы каждый браузер перемещал позицию каретки в начало первого абзаца.JavaScript: установите позицию каретки на начало первого абзаца (ошибка Opera)

Предположим, что вся страница доступна для редактирования, и мы не рассматриваем ничего, кроме прямой цели.

Это прекрасно работает в 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(); 
} 
} 

Не редактировать свой пост, если вы не понимаете, что-то комментарий, и я буду рад уточнить.

ответ

0

Эта проблема вызвана краем CSS в абзацах в Opera. Зачем? Я понятия не имею, просто этот минимальный тестовый пример воспроизводит его.

Обход, субъективный, маржа и набивка имеют разные применения, и в моих обстоятельствах я не могу использовать прописку вместо полей, заставляя меня полагаться на 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> 
+0

[Параллельный поток на my.opera.com] (http://my.opera.com/community/forums/topic.dml?id=1449662). – ricksmt

Смежные вопросы