JS queryCommandState(“superscript”) 总是返回 false

JS queryCommandState("superscript") always return false

本文关键字:返回 false queryCommandState superscript JS      更新时间:2023-09-26
document.queryCommandState("superscript"); //always return false
document.queryCommandState("bold"); // works fine

如何检测内容可编辑元素中的子或 sup?

我知道

我来晚了,但只是出于文档目的,我想我会回复它:

这很可能与<sub />/<sup />元素的样式有关。在向下@tim的示例中,使用的是默认样式。我更新了小提琴(http://jsfiddle.net/alarie/vzxh3818/)以使用一些样式,然后queryCommandState将返回false。(在这种情况下,实际上是破坏它的vertical-align: baseline;属性)

规范实际上包含有关如何根据有效命令值确定状态的说明:

注意 [有效命令值] 在逻辑上有点像 CSS 计算或解析的值, 事实上,对于大多数命令,它与CSS解析值相同 (请参阅算法的末尾)。我们需要一个单独的概念 由于某种原因我们不能依赖CSS的命令:createLink和 取消链接根本不与CSS相关,backColor和hiliteColor需要 特殊处理,因为背景色不是遗传的 属性、下标和上标依赖于 <sub>/<sup> 而不是 CSS 垂直对齐,删除线和下划线不映射到唯一 CSS 属性。

来源: https://w3c.github.io/editing/execCommand.html#assorted-inline-formatting-command-algorithms

这是上标/下标的实际算法(来自同一规范):

  1. 让受下标影响 并受上标影响是两个布尔变量,最初都是 假。
  2. 虽然节点是内联节点:

    注意 火狐 6.0a2 忽略 为此目的垂直对齐,只关心和 标记本身。Opera 11.11 与此类似,实际上行为是这样的 即使是像粗体这样的命令。该规范最初遵循Chrome 14 dev,主要是因为 WebKit 本身将产生跨度 垂直对齐的子或超级,我们希望正确处理它们。 然而,凉介告诉我,WebKit在这里的行为被视为 错误,所以我更改了它以匹配壁虎/歌剧。

    如果节点是子节点,则设置为受下标影响为 true。 <- 这是 chrome/webkit 行为不正确的地方

  3. 否则,如果节点是 sup,则设置受上标影响为 true。设置 节点到其父节点。如果受下标影响并受以下标影响 上标均为真,返回字符串"混合"。如果受到以下影响 下标为真,返回"下标"。如果受上标影响 true,返回"上标"。返回空值。

因此,到目前为止的解决方案是 1) 不要摆弄风格,或者更确切地说是 2) 自己检查。