我似乎发现了一个与Internet Explorer 8有关的问题,即查找Text Range的位置 - 例如当前选择的文本。我在StackOverflow或其他地方没有找到任何关于这个问题的报告。
TextRange.offsetLeft和TextRange.offsetTop报告范围的左上角,在所有我在IE8中看到的情况下,它们大致正确,除非范围在IFrame内。当范围在IFrame内时,offsetLeft和offsetTop的值会相对于IFrame在其父级内的位置向负方向偏移。(请参见下面的示例)
此问题仅出现在以下情况下:
问题示例:(请参见IE8与IE9之间的差异)
TextRange.offsetLeft和TextRange.offsetTop报告范围的左上角,在所有我在IE8中看到的情况下,它们大致正确,除非范围在IFrame内。当范围在IFrame内时,offsetLeft和offsetTop的值会相对于IFrame在其父级内的位置向负方向偏移。(请参见下面的示例)
此问题仅出现在以下情况下:
- 浏览器为IE8
- 页面处于标准模式
- 浏览器为IE7或IE10
- 页面处于怪异模式
- 其他人能否确认这个问题或者我疯了?
- 这是已知的问题吗?
- 是否有任何明智的解决方案或工作区域?(明智的解决方案是指框架中的JS不需要知道其父窗口的任何信息)
问题示例:(请参见IE8与IE9之间的差异)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>IE8 IFrame Text Range Position Test Page</title>
<style type="text/css">
body {
font-family: Tahoma;
}
#target {
background-color: #CCC;
position: absolute;
left: 50px;
top: 50px;
}
#bullsEye {
position: absolute;
background-color: red;
width: 5px;
height: 5px;
}
iframe {
margin: 10px 75px;
}
</style>
<script type="text/javascript" charset="utf-8">
function target() {
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById('target'));
range.select();
var bullsEye = document.createElement('div');
bullsEye.id = 'bullsEye';
bullsEye.style.left = range.offsetLeft + 'px';
bullsEye.style.top = range.offsetTop + 'px';
document.body.appendChild(bullsEye);
document.getElementById('output').innerHTML = 'range.offsetLeft = ' + range.offsetLeft + ', range.offsetTop = ' + range.offsetTop;
}
</script>
</head>
<body>
<div id="target">Target</div>
<input type="button" value="Hit Target" onclick="target();"> <span id="output"></span>
<br><br><br><br><br>
<script></script>
</body>
</html>