【问题标题】:How to keep html attribute unchanged in wysiwyg editor?如何在所见即所得编辑器中保持 html 属性不变?
【发布时间】:2018-08-28 19:04:49
【问题描述】:

在所见即所得的文本编辑器源代码视图中,我有这个简单的 html:

<span style="font-family: Moul;" {%if  loop.first=='first'%} first="" {%endif%}>Hello Text</span>

但是,当我从源视图切换到可视视图时,所见即所得将我的 html 代码更改为:

<span style="font-family: Moul;" {%if="" loop.first="='first'%}" {%endif%}="">Hello Text</span>

但是,我想保持我的 html 不变,而无需通过文本编辑器进行更改。

$('#summernote').summernote({
  height: 300
});
body {
  padding: 40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.5.0/summernote.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.5.0/summernote.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.5.0/summernote-bs3.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.min.css">

<textarea name="summernote" id="summernote" cols="30" rows="10">
</textarea>

编辑:

实际上,所见即所得将单个html属性转换为附加“=”和双引号" "符号。我测试在所见即所得的源视图中写入&lt;input type="checkbox" checked&gt;,它将被转换为这样的属性检查:由于所见即所得将检查的单个属性视为无效属性,因此它附加等号“=”和双引号“”输出@ 987654328@。您可以在上面的代码 sn -p 中对其进行测试。这是,因此,我上面的jinja2 语法附加了=" ",这会在运行时导致语法错误异常。

我尝试使用正则表达式来帮助防止所见即所得改变我的 html 如下:

codeview = $('summernote').summernote('code');
console.log(codeview);
Regx  =  /(\<.*\s*\{\%[^}]*\%\}.*\s*\>)/g;
codeview.replace(Regx,'$1');

但在代码视图和可视视图之间切换视图时,它仍然会更改我的 html。

我怎样才能使我的 html 在所见即所得的 Summernote 编辑器中保持不变?谢谢。

【问题讨论】:

  • 这是什么语法? {%if loop.first=='first'%}EJS?
  • @ArtemSolovev,它是jinja2 代码。我曾经检查条件以将属性设置为 html 元素。事实上,所见即所得将单个 html 属性转换为附加“=”符号。我在所见即所得的源视图中测试了写入&lt;input type="checkbox" checked&gt;,它将属性checked 转换为如下所示:&lt;input type="checkbox" checked=""&gt; 因为所见即所得将单个属性checked 视为无效属性,因此它附加等号“=”和双精度引用 "" 给它。因此,我上面的 jinja2 语法附加了 = 和“”,这会在运行时导致 syntax error 异常。
  • 您希望它如何在可视化编辑器中显示?在这种情况下,您应该只禁用可视化编辑器,因为当只能部分渲染某些内容时,以可视化方式渲染它是没有意义的?
  • 我想在运行时正确执行html代码和jinja2代码。因为我正在为我的客户做模板设计,所以虚拟视图可以帮助我减少样式和 html 的编码。然而,我很难防止所见即所得的编辑器破坏我的编码语法。
  • 我不明白您如何处理可视化编辑器的这种行为。我建议你改用代码编辑器,每次使用可视化编辑器都会毁掉你的代码。

标签: javascript html jinja2 wysiwyg summernote


【解决方案1】:

我假设您对 first 属性进行了一些代码检查?

如果那是 CSS,那么如果可能的话,您可以更改它以检查未空的 first 属性:

[first]:not([first='']){ }

如果是 javascript 它是:

document.querySelectorAll("[first]:not([first=''])");

想要澄清上述内容的原因是,如果是这种情况,您可以将您的条件移动到 first 属性中,希望它不会受到影响:

<span style="font-family: Moul;" first="{%if loop.first=='first' %}true{%endif%}">Hello Text</span>

【讨论】:

  • 对我的情况有用吗?基本上,我在编辑器中检查元素属性&lt;input ="checkbox" {% if var_name==True %} checked {% endif %}>` 中的 if-condition。我想保持不变。您可以在我的 sn-p 问题中对其编辑器进行测试。谢谢。
  • {% if var_name==True %}checked{%endif%} 是我在输入元素中设置的jinja2 代码。如果条件为真,我将在浏览器中渲染期间将属性checked 设置为我的输入元素。但是,编辑器不断破坏这种代码结构。谢谢。
  • 它不适用于checked no,因为这是一个不需要值来检查复选框的属性。本质上checkedchecked=""相同与checked="checked"相同与checked="false"相同
猜你喜欢
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
相关资源
最近更新 更多