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
,startOffset
和endOffset
屬性。
您似乎在使用「樣式」來表示元素名稱。元素名稱是什麼? – bdash