JavaScript范围出错了

时间:2009-09-15 12:14:38

标签: javascript firefox

以下代码在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>

我做错了什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要扩展xxx功能以支持IE,而目前却没有。 document.createRangewindow.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);