以下是我在UIWebView中使用的一些HTML:
<div id = "1">
<span style = "background-color:red">
<a href = "10&20">
This is a link
</a>
</span>
</div>
点击链接后,我想以编程方式选择UIWebView中的链接文本(现在将使用蓝色iOS文本选择工具突出显示“这是一个链接”)。这就是我在a标签的href中发送一些范围信息的原因。这是我用来尝试进行这种程序化选择的电话:
//set content editable true
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"selectElementContentsInRange(document.getElementById('1'), 10, 20)"]];
这是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);
}
正如您可以看到警报一样,它不会让它超过range.setStart()
调用而不会抛出错误。 Safari javascript调试器给出了这个错误:
IndexSizeError: DOM Exception 1: Index or size was negative, or greater than the allowed value.
我尝试了很多不同的东西,但没有任何工作。我完全在我的智慧结束,并真的很感激有关如何做到这一点的一些见解。我开始怀疑甚至可以在UIWebView中以编程方式选择文本。我错了吗?有没有人这样做过?
答案 0 :(得分:1)
问题是你试图在<div>
元素的第一个子节点中设置范围的边界,如果你的HTML看起来确实如此,那么它是一个只有空格的文本节点。问题,如果实际HTML中没有空格,则为<span>
元素。在后一种情况下,即在元素中设置范围边界,偏移量表示边界之前元素的子节点数。