我想使用getBoundingClientRect()獲取在contenteditable div內的遊標的y座標。代碼的IE分支有效,但其他分支(即我當前測試目的的Firefox 3.5)則不支持。getBoundingClientRect與Firefox的問題
下面的代碼在註釋中有***標記的問題行。在代碼中的這一點,selObj和selRange都有一個值(在Firebug中確認),但我無法在其中任何一個上調用getBoundingClientRect()(例如,selObj.getBoundingClientRect不是函數)。我已經讀過,Range對象上的Firefox現在支持getBoundingClientRect(),但是我無法使其工作。我想我必須將它稱爲錯誤類型的對象...?我應該怎樣稱呼它?
以下代碼是包含相關javascript的html文件的完整測試用例。在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>
「流行音樂」?你能解釋一下這是什麼意思嗎?它是否會拋出異常? – Pointy 2010-02-11 14:36:38
是的,對不起,這就是'pops'的意思 – Tom 2010-02-26 16:33:55