2014-02-20 22 views
0

這裏編程方式選擇文本時SETEND拋出的錯誤是一些HTML,我在我的UIWebView工作:setStart並試圖在UIWebView的

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

一旦鏈接被點擊,我希望以編程方式選擇鏈接文本在UIWebView中(所以「這是一個鏈接」現在將通過藍色iOS文本選擇工具突出顯示)。這就是爲什麼我要在標籤的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中選擇文本。我錯了嗎?有沒有人做過這個?

回答

1

問題是,您正試圖在<div>元素的第一個子節點中設置範圍的邊界,如果您的HTML確實看起來像問題中的樣子,或者如果您的實際HTML中沒有空白,則爲<span>元素。在後一種情況下,即在元素中設置範圍邊界,偏移表示邊界之前的元素的子節點的數量。

+0

感謝您的回答!如果可以的話,我希望得到更多的澄清。因爲我抓住外部div(這實際上是HTML如何看起來btw),它實際上並沒有任何文本來放置範圍。所以我需要獲取子範圍,然後獲取範圍的子錨點標記以便進行範圍選擇。我在看這個嗎?謝謝你的幫助! – Lizza

+1

@Lizza:我認爲,只要所有的範圍都包含在''元素中的那個文本節點中。 –