document.queryCommandState("superscript"); //always return false
document.queryCommandState("bold"); // works fine
如何在contentEditable元素中检测sub或sup?
答案 0 :(得分:0)
我知道我迟到了,但出于记录目的,我想我会回复它:
这很可能与<sub />
/ <sup />
元素的样式有关。
在@ tim-down的示例中,正在使用默认样式。我更新了小提琴(http://jsfiddle.net/alarie/vzxh3818/)以使用某些样式,然后queryCommandState
将返回false
。 (在这种情况下,它实际上是打破它的vertical-align: baseline;
属性)
规范实际上包含了关于如何根据有效命令值确定状态的说明:
注意[有效命令值]在逻辑上有点像CSS计算或解析值, 事实上,对于大多数命令,它与CSS解析值相同 (参见算法结束)。我们需要一个单独的概念 由于某种原因我们不能依赖CSS的命令:createLink和 unlink根本不是CSS相关的,backColor和hiliteColor需要 特殊待遇因为背景颜色不是遗传的 property,subscript和superscript依赖于
<sub>
/<sup>
而不是CSS vertical-align,删除线和下划线不映射到唯一 CSS属性。来源:https://w3c.github.io/editing/execCommand.html#assorted-inline-formatting-command-algorithms
这是上标/下标的实际算法(来自同一规范):
- 受下标影响 并受上标影响,最初是两个布尔变量 假。
虽然node是内联节点:
注意Firefox 6.0a2会忽略 为此目的垂直对齐,只关心和 标记自己。 Opera 11.11是类似的,实际上就像那样 即使是像粗体这样的命令。该规范最初遵循Chrome 14 dev,主要是因为WebKit本身会产生跨度 vertical-align sub或super,我们想要正确处理它们。 然而,Ryosuke告诉我,WebKit在这里的行为被视为一个 bug,所以我把它改成了Gecko / Opera。
如果node是sub,则受下标影响的设置为true。&lt; - 这是chrome / webkit行为不正确的地方
- 醇>
否则,如果node是sup,则受上标的设置为true。组 节点到其父节点。如果受下标影响并受其影响 上标都是true,返回字符串“mixed”。如果受到影响 下标为真,返回“下标”。如果受上标影响 是的,返回“上标”。返回null。
所以现在的解决方案是1)不要乱用风格,或者更确切地说2)自己做检查。