Javascript 试图以编程方式选择UIWebView中的文本时,setStart和setEnd引发错误

Javascript 试图以编程方式选择UIWebView中的文本时,setStart和setEnd引发错误,javascript,ios,uiwebview,range,selection,Javascript,Ios,Uiwebview,Range,Selection,以下是我在UIWebView中使用的一些HTML: <div id = "1"> <span style = "background-color:red"> <a href = "10&20"> This is a link </a> </span> </div> 这是javascript函数: function selectEleme

以下是我在UIWebView中使用的一些HTML:

<div id = "1">
    <span style = "background-color:red">
         <a href = "10&20">
              This is a link
         </a>
    </span>
</div>
这是javascript函数:

function selectElementContentsInRange(el, first, second) {
    var range = document.createRange();
    alert("Makes it here");
    range.setStart(el.firstChild, first);
    alert("Doesn't make it here");
    range.setEnd(el.firstChild, second);

    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
}
正如您在警报中所看到的,它不会通过
范围.setStart()
调用而不会抛出错误。Safari javascript调试器给了我以下错误:

IndexSizeError: DOM Exception 1: Index or size was negative, or greater than the allowed value.

我尝试了很多不同的方法,但都没有效果。我完全不知所措,非常希望能够了解如何做到这一点。我开始怀疑是否有可能在UIWebView中以编程方式选择文本。我错了吗?有人这样做过吗?

问题是,您试图在
元素的第一个子节点中设置范围的边界,如果您的HTML看起来确实像问题中的HTML,则该节点为纯空白文本节点;如果实际HTML中没有空白,则为
元素。在后一种情况下,即在元素中设置范围边界,偏移量表示边界之前元素的子节点数。

谢谢您的回答!如果可以的话,我很想得到更多的澄清。因为我正在抓取外部div(顺便说一句,这就是HTML的外观),所以它实际上没有任何文本可以放在周围。所以我需要得到子跨度,然后是跨度的子锚点标记,以便进行范围选择。我看得对吗?谢谢你的帮助@莉扎:我想是的,只要所有范围都包含在
元素中的一个文本节点中。
IndexSizeError: DOM Exception 1: Index or size was negative, or greater than the allowed value.