Я пытаюсь получить координату y курсора внутри contenteditable div, используя getBoundingClientRect(). Развертка IE кода работает, но другая ветвь (т. Е. Firefox 3.5 для моих текущих целей тестирования) не работает.проблема getBoundingClientRect с Firefox
В приведенном ниже коде содержатся проблематичные строки, отмеченные знаком «***». В этот момент кода оба selObj и selRange имеют значение (подтверждено в Firebug), но я не могу вызвать getBoundingClientRect() для любого из них (например, selObj.getBoundingClientRect не является функцией). Я прочитал, что getBoundingClientRect() теперь поддерживается Firefox в объекте Range, но я не могу заставить его работать. Думаю, я должен называть его неправильным типом объекта ...? Что я должен называть?
Следующий код является полным тестовым примером в виде файла html, содержащего соответствующий javascript. Просмотренный в IE, я получаю значение для координаты y курсора, но в Firefox он появляется.
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
#pageContainer {
padding:50px;
}
.pageCommon {
width: 100px;
height: 100px;
background-color:#ffffD0;
padding: 10px;
border: 1px solid black;
overflow: auto;
}
</style>
</head>
<body>
<div id="pageContainer">
<div id="editor" class="pageCommon" contenteditable onclick="setPageNav();" onkeypress="setPageNav();">
</div>
<div>y: <span id="y"></span></div>
</div>
<script>
var y;
function setPageNav() {
page = document.getElementById("editor");
if (window.getSelection) {
var selObj = window.getSelection();
var selRange = selObj.getRangeAt(0);
// *** Neither of these next two lines work, error is : selObj.getBoundingClientRect is not a function
y = selObj.getBoundingClientRect().top;
y = selRange.getBoundingClientRect().top;
} else if (document.selection) {
var range = document.selection.createRange();
y = range.getBoundingClientRect().top;
}
document.getElementById("y").innerHTML = y;
}
</script>
</body>
</html>
"Pops"? Можете ли вы объяснить, что это значит? Вызывает ли это исключение? – Pointy
Да, извините, это то, что я имел в виду под «pops» – Tom