【发布时间】:2011-05-03 01:34:02
【问题描述】:
我的任务是设置一个文本插入符号以显示在 contentEditable div 内的空跨度节点内。
以下内容在 Firefox 3.6 上没有问题:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/jquery-1.4.3.min.js">
</script>
<style>
#multiple {
border: 1px solid #ccc;
width: 800px;
min-height: 20px;
padding: 5px;
outline: none;
}
</style>
<script>
$(document).ready(function(){
var contentEditable = document.getElementById('multiple');
var lastItem = contentEditable.getElementsByTagName('span').item(2);
var selectElementText = function(el, win){
win = win || window;
var doc = win.document, sel, range;
if (win.getSelection && doc.createRange) {
range = doc.createRange();
range.selectNodeContents(el);
range.collapse(false);
sel = win.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
else
if (doc.body.createTextRange) {
range = doc.body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
contentEditable.focus();
selectElementText(lastItem);
});
</script>
<title>Range Selection Tasks (Make Me Want to Cry)</title>
</head>
<body>
<div id="multiple" contentEditable="true">
<span style="color:red">First</span><span style="color:green">Second</span><span style="color:blue"></span>
</div>
</body>
</html>
...但在 Webkit 和 IE 上,焦点设置为 倒数第二个 跨度。不知道为什么。如果我在最后一个跨度内放一个空格,它会起作用,但我会得到一个字符范围选择。
话虽如此,如果插入符号位于开头,则可以在最后一个节点中使用空格。
对此的任何帮助将不胜感激。提前谢谢你。
【问题讨论】:
标签: javascript text cross-browser contenteditable