CKEditor 的默认删除线功能运行良好并且符合逻辑,在带有删除线的文本周围添加一个“s”标签(我也可以让编辑器使用 html5 的“del”标签),但是问题是辅助阅读技术如因为 NVDA 或 JAWS 在没有特殊设置的情况下不会以任何不同于普通文本的方式阅读此类内容。我要做的是在删除线文本的开头和结尾添加一个跨度标签,向用户表明这一事实:
<p>
<span style="height: 1px; width: 1px; position: absolute; overflow: hidden; top: -10px;">Start strikethrough. </span>
<s>Text with strikethrough</s>
<span style="height: 1px; width: 1px; position: absolute; overflow: hidden; top: -10px;">End strikethrough. </span>
</p>
正如您在此代码中看到的那样,跨度在页面中不可见,但阅读器将遵循 dom 顺序,因此将提醒用户注意删除线。我知道您可以构建一个插件来插入任何 html,但我必须使这项工作以与基本样式按钮相同的方式工作,并具有切换功能:
- 简单的部分:如果内容中有选择并且按下按钮,我们必须删除内容。这一个更容易,因为我们可以获得选定的 html 并用我想要的包围它。
- 更难的部分:如果没有选择并且按下按钮,那么接下来写的每个文本都必须有删除线。
经过大量研究和分析“真正的”插件是如何制作的,我得出了这样的结论:
CKEDITOR.plugins.add( 'customStrike', {
icons: 'customStrike',
init: function( editor ) {
var style = new CKEDITOR.style( { element: 's' } );
editor.attachStyleStateChange( style, function (state) {
!editor.readOnly && editor.getCommand( 'customStrike').setState(state);
} );
editor.addCommand( 'customStrike', new CKEDITOR.styleCommand( style ) );
if ( editor.ui.addButton ) {
editor.ui.addButton( 'CustomStrike', {
label: 'Strike Through',
command: 'customStrike',
toolbar: 'custom'
} );
}
}
});
这与真正的插件完全一样,我尝试解决此代码,但据我所知,样式定义中的元素属性只接受一个标签,我需要一种使用元素属性嵌套标签的方法来完成此操作。
有没有办法解决这个问题?
任何帮助,将不胜感激。