2013-01-22 37 views
1

我目前正在使用可編輯的WebView,並提供控件將所選文本更改爲<H1><H6>。默認normal風格的文本只是一個<div>
我想知道,如何我可能會使用JavaScript來檢查什麼類型的樣式(H1〜H6或DIV)的文本對應於...我目前使用使用Javascript確定文本樣式

下面的代碼修改所選文本的文本樣式爲<H1>

[webView stringByEvaluatingJavaScriptFromString: 
       @"document.execCommand(\"FormatBlock\", false, \"<H1>\")"]; 

有剛剛光標的位置的方式來檢查是否選擇什麼樣式的文本(無論是通過拖動,或)是使用JavaScript?

+0

您似乎在使用「樣式」來表示元素名稱。元素名稱是什麼? – bdash

回答

1

HTML內容中的選擇可能跨越多個元素。它也可能只包含開始和結束元素中的部分文本。這使得很難爲您的問題提供確切的答案,因爲在一般情況下,沒有適用於選擇的單個元素名稱或CSS樣式。但是,希望下面提到的構建塊可以讓您構建符合您意圖的行爲。

由於您正在使用WebKit的Objective-C API,因此我將介紹它如何在Objective-C API和JavaScript內工作。由於JavaScript不支持編譯器反饋,因此使用Objective-C API會更令人愉快。


一個web視圖內選擇被表示爲DOMRange,並且可以使用被-[WebView selectedDOMRange] retreived。選擇從-startContainer在偏移量-startOffset處返回到該節點的文本中的元素開始。選擇繼續通過DOM順序的所有節點,直到由-endContainer返回的節點內的偏移-endOffset

插入點表示爲摺疊的DOMRange,如collapsed屬性所示。在這種情況下,-startContainer-endContainer應該返回相同的值,指示脫字符所在的節點,並且-startOffset-endOffset將相等,並表示插入符號所在的文本內容的偏移量。

一旦你已經確定你參與可以使用常規的DOM API來確定標籤名(-[DOMNode tagName])和CSS對象模型API來檢索樣式信息(-[DOMDocument getComputedStyle:pseudoElement:])的節點。


從JavaScript端的概念是相似的,但有一個Selection對象的中間步驟你到Range年代以前。

您使用window.getSelection()檢索Selection對象。該對象將包含零個或多個範圍,每個範圍代表一個選定的區域。零範圍意味着有一個插入點而不是真正的選擇。由於某些平臺支持不連續的選擇,因此允許多個範圍。

如上所述,Selection對象的rangeCount爲零,isCollapsed值爲true表示該選擇只是一個插入點。

rangeCount非零時,您可以重複調用getRangeAt來遍歷Selection內的範圍。從這一點開始,您將返回使用與上述Objective-C情況中描述的DOMRange對象具有相同接口的Range對象,並使用startContainer,endContainer,startOffsetendOffset屬性。

+0

謝謝!我使用了window.getSelection()方法:D謝謝! – Heartinpiece

相關問題