尝试以编程方式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中没有空格。 在后一种情况下,即在元素中设置范围边界,偏移量表示边界之前的元素的子节点的数量。