以下代码在Firefox中给出了一个非常奇怪的错误:
错误:未捕获的异常: [例外......“索引或大小是 否定或大于允许的 金额“代码:”1“nsresult: “0x80530001 (NS_ERROR_DOM_INDEX_SIZE_ERR)” 位置:“file:/// G:/test.html行: 13" ]
<html>
<head>
<title>test</title>
<script>
function xxx() {
var myList = document.getElementsByTagName("div");
var range = document.createRange();
var start = myList[0];
var end = myList[0];
range.setStart(start, 1); // Edit: this is (presumably) line 13
range.setEnd(end, 3);
window.getSelection().addRange(range);
}
</script>
</head>
<body onload="xxx();">
<div>abcddasdsadasda</div>
<div>2312321</div>
</body>
</html>
我做错了什么?
谢谢。
答案 0 :(得分:2)
您需要扩展xxx功能以支持IE,而目前却没有。 document.createRange
和window.getSelection
函数似乎无法在此环境中运行。
怎么样:
function xxx()
{
var myList = document.getElementsByTagName("div");
if(window.getSelection)
{
var range = document.createRange();
var start = myList[0];
var end = myList[0];
range.setStart(start, 0);
range.setEnd(end, 1);
window.getSelection().addRange(range);
}
else
if(document.selection)
{
document.selection.empty();
var txt = document.body.createTextRange();
txt.moveToElementText(myList[0]);
txt.setEndPoint("EndToEnd", txt);
var start;
txt.moveStart('character', start);
if (length + start > myList[0].innerHTML.length)
{
length = myList[0].innerHTML.length - start;
}
txt.moveEnd('character', -(myList[0].innerHTML.length - start - length));
txt.select();
}
}
代码将选择整个DIV元素的文本。你需要摆弄端点才能让它只选择这个范围的一部分。
答案 1 :(得分:1)
首先,我强烈推荐使用Firebug来调试FireFox上的Javascript。它立即将我指向了setEnd行。
现在给你答案。 setStart和setEnd的第二个参数是要选择的节点深度。由于您只有两个没有子节点的div标签,因此只有深度为0和1.对于myList [0],深度0是div标签本身,深度1是div中的文本节点。
由于我不确定您在此处选择的内容是用于选择两个div标签内所有文本的更正代码。
var end = myList[1];
range.setStart(start, 0);
range.setEnd(end, 1);