【问题标题】:Ckeditor in Drupal 8 : how to remove <span> tags if they don't have class attributes?Drupal 8 中的 Ckeditor:如果 <span> 标签没有类属性,如何删除它们?
【发布时间】:2018-10-10 02:11:43
【问题描述】:

我在 Ckeditor - Drupal 8 中使用“允许的 html 标签”过滤器。

我希望 Ckeditor 保留具有特定类或 ID 的 &lt;span&gt; 标签,如果它没有属性则删除。

例如:

  • 保持跨度:&lt;span class="apple"&gt;text sample&lt;/span&gt;
  • 保持跨度:&lt;span id="fruit"&gt;text sample&lt;/span&gt;
  • 删除跨度:&lt;span&gt;text sample&lt;/span&gt; -&gt; text sample

实际上,当我配置文本格式时,我在允许的标签字段中有这段代码:

<p><sup><sub><span id class="apple"><a href !href accesskey id rel target title>

它让&lt;span&gt; 带有 ID 或想要的类,但我无法摆脱不想要的没有属性的 &lt;span&gt;

有没有办法解决这个代码输入问题?

提前致谢,

艾米莉

【问题讨论】:

  • 我们可以使用 Javascript/jQuery 吗?
  • 我没有遇到完全相同的问题,但是类似的问题,我有很多span标签,由这个错误引起:editor.insertHtml pollutes editable with empty spans #2813。我希望这个问题的答案也能帮助我。 span 标签需要在提交表单时被 ckeditor 删除,因为它们不应该被保存。

标签: ckeditor drupal-8


【解决方案1】:

所以这是我编写的自定义模块,以使其工作并解决 CKEDITOR 中的这个主要错误:

<?php 
use Drupal\editor\Entity\Editor;

function MODULENAME_editor_js_settings_alter(array &$settings) {
foreach ($settings['editor']['formats'] as $name => $value) {
   $settings['editor']['formats']['machine_name_of_your_text_editor_profile'] 
   ['editorSettings']['allowedContent'] =   
   'p sup h1 h2 h3' +
   'span[!id];
   span(!foo);
   span(!bar);
   span(!jane);
   span(!doe);'
   ;}
}

结果:如果没有 ID,或者如果您使用此列表中未提及的类(foo、bar、jane 或 doe),则跨度将被完全删除。您必须声明需要显示的所有元素,因为此配置将覆盖 ACF 字段中的所有先前输入。

对于这个解决方案,我的灵感来自:

注意:限制允许的 HTML 标记和纠正错误的 HTML 过滤器(在 /admin/config/content/formats 中)与 Ckeditor API 的行为不一致。在该字段中真正实现的选项只有一部分,并且使用了“!”不工作。这就是提供的解决方案使用“hook_editor_js_settings_alter”的原因。

【讨论】:

    【解决方案2】:
    function MODULENAME_editor_js_settings_alter(array &$settings) {                                                                                                                                                                                                                                                                                                                                                                                                                                
      $formats = ['basic_html', 'full_html'];                                                                                                                                                                                                                                                                                                                                                                                                                                                     
      foreach ($formats as $format) {                                                                                                                                                                                                                                                                                                                                                                                                                                                             
       $settings['editor']['formats'][$format]['editorSettings']['allowedContent']['span']['attributes'] = '!class';                                                                                                                                                                                                                                                                                                                                                                              
      }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    }   
    

    allowedContent 在 Drupal 加载时是一个数组。您可以使用 ACF 规则来指定是否需要属性,而不是用字符串替换它。这允许 UI 中的配置仍然适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2020-11-23
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      相关资源
      最近更新 更多