Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript确定文本样式_Javascript_Html_Macos_Cocoa - Fatal编程技术网

使用Javascript确定文本样式

使用Javascript确定文本样式,javascript,html,macos,cocoa,Javascript,Html,Macos,Cocoa,我目前正在使用一个可编辑的WebView,并提供控件将所选文本更改为~。默认的normal样式文本只是一个 我想知道,如何使用javascript检查文本对应的样式类型(H1~H6或DIV) 我目前正在使用以下代码将所选文本的文本样式修改为 [webView stringByEvaluatingJavaScriptFromString: @“document.execCommand(\”FormatBlock\”,false,\“\”)”; 是否有方法检查所选文本(无论是通过拖动还是仅通过光标

我目前正在使用一个可编辑的WebView,并提供控件将所选文本更改为
~
。默认的
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>\")"];