使用Javascript确定文本样式
我目前正在使用一个可编辑的WebView,并提供控件将所选文本更改为使用Javascript确定文本样式,javascript,html,macos,cocoa,Javascript,Html,Macos,Cocoa,我目前正在使用一个可编辑的WebView,并提供控件将所选文本更改为~。默认的normal样式文本只是一个 我想知道,如何使用javascript检查文本对应的样式类型(H1~H6或DIV) 我目前正在使用以下代码将所选文本的文本样式修改为 [webView stringByEvaluatingJavaScriptFromString: @“document.execCommand(\”FormatBlock\”,false,\“\”)”; 是否有方法检查所选文本(无论是通过拖动还是仅通过光标
~
。默认的normal
样式文本只是一个
我想知道,如何使用javascript检查文本对应的样式类型(H1~H6或DIV) 我目前正在使用以下代码将所选文本的文本样式修改为
[webView stringByEvaluatingJavaScriptFromString:
@“document.execCommand(\”FormatBlock\”,false,\“\”)”;
是否有方法检查所选文本(无论是通过拖动还是仅通过光标位置)使用的是javascript的样式?HTML内容中的选择可能跨越多个元素。它也可能只包含开始和结束元素中的部分文本。这使得很难为您的问题提供准确的答案,因为在一般情况下,没有一个单一的元素名称或CSS样式应用于选择。然而,希望下面提到的构建块将允许您构建符合您意图的行为 由于您使用的是WebKit的Objective-CAPI,因此我将描述它如何在Objective-CAPI和JavaScript中工作。使用Objective-CAPI会更令人愉快,因为编译器的反馈是JavaScript无法获得的
网络视图中的选择表示为
DOMRange
,可以使用-[WebView selectedDOMRange]
检索。选择从节点文本中偏移量-startOffset
处由-startContainer
返回的元素开始。按DOM顺序继续选择所有节点,直到-endContainer
返回的节点内的偏移量-endOffset
插入点表示为折叠的DOMRange
,如折叠的
属性所示。在这种情况下,-startContainer
和-endContainer
应返回指示插入符号所在节点的相同值,-startOffset
和-endOffset
将相等,并表示插入插入符号所在文本内容的偏移量
一旦确定了所涉及的节点,就可以使用常规的DOM API来确定标记名(-[DOMNode tagName]
)和CSS对象模型API来检索样式信息(-[DOMDocument getComputedStyle:pseudoElement:
)
从JavaScript方面看,这些概念是相似的,但是在进入
范围之前,有一个中间步骤是选择
对象
您可以使用window.getSelection()
检索Selection
对象。此对象将包含零个或多个范围,每个范围表示选定区域。零范围意味着有一个插入点,而不是一个真正的选择。由于某些平台支持不连续选择,因此允许多个范围
如上所述,Selection
对象的rangeCount
值为零,iscollected
值为true,表示该选择只是一个插入点
当rangeCount
非零时,您可以通过反复调用getRangeAt
在选择范围内迭代。从那时起,您就可以使用与上述Objective-C案例中描述的DOMRange
对象具有相同接口的Range
对象,使用startContainer
,endContainer
,startOffset
和endOffset
属性。HTML内容中的选择可能跨越多个元素。它也可能只包含开始和结束元素中的部分文本。这使得很难为您的问题提供准确的答案,因为在一般情况下,没有一个单一的元素名称或CSS样式应用于选择。然而,希望下面提到的构建块将允许您构建符合您意图的行为
由于您使用的是WebKit的Objective-CAPI,因此我将描述它如何在Objective-CAPI和JavaScript中工作。使用Objective-CAPI会更令人愉快,因为编译器的反馈是JavaScript无法获得的
网络视图中的选择表示为DOMRange
,可以使用-[WebView selectedDOMRange]
检索。选择从节点文本中偏移量-startOffset
处由-startContainer
返回的元素开始。按DOM顺序继续选择所有节点,直到-endContainer
返回的节点内的偏移量-endOffset
插入点表示为折叠的DOMRange
,如折叠的
属性所示。在这种情况下,-startContainer
和-endContainer
应返回指示插入符号所在节点的相同值,-startOffset
和-endOffset
将相等,并表示插入插入符号所在文本内容的偏移量
一旦确定了所涉及的节点,就可以使用常规的DOM API来确定标记名(-[DOMNode tagName]
)和CSS对象模型API来检索样式信息(-[DOMDocument getComputedStyle:pseudoElement:
)
从JavaScript方面看,这些概念是相似的,但是在进入范围之前,有一个中间步骤是选择
对象
您可以使用window.getSelection()
检索Selection
对象。此对象将包含零个或多个范围,每个范围表示选定区域。零范围意味着有一个插入点
[webView stringByEvaluatingJavaScriptFromString:
@"document.execCommand(\"FormatBlock\", false, \"<H1>\")"];