尝试以编程方式selectUIWebView中的文本时setStart和setEnd引发错误

这里是我在我的UIWebView中使用的一些HTML:

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

一旦链接被点击,我想以编程方式selectUIWebView中的链接文本(所以“这是一个链接”,现在将用蓝色的iOS文本select工具突出显示)。 这就是为什么我要在标签的href中发送一些范围信息。 这是我正在用来尝试做这个程序select的呼叫:

 //set content editable true [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"selectElementContentsInRange(document.getElementById('1'), 10, 20)"]]; 

这是JavaScript的function:

 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); } 

正如你可以看到的警报,它不会超过range.setStart()调用,而不会引发错误。 Safari JavaScriptdebugging器给我这个错误:

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

我已经尝试了很多不同的东西,没有任何工作。 我完全在我的智慧结尾,并非常感谢一些如何做到这一点的见解。 我开始怀疑,甚至有可能在UIWebView中以编程方式select文本。 我错了吗? 有没有人做过这个?

问题在于你试图在<div>元素的第一个子节点中设置范围的边界,如果你的HTML确实看起来像是在问题中那样, <span>元素,如果您的实际HTML中没有空格。 在后一种情况下,即在元素中设置范围边界,偏移量表示边界之前的元素的子节点的数量。