如何使用 ContentTools 在之前或之后没有内容时保留多个 <br>
How to preserve multiple <br> when no content before or after with ContentTools
我注意到ContentTools(一个所见即所得的编辑器)在<p>
的开头或结尾删除了多个<br>
标签,当<br>
之前或之后没有内容时。
<p>
<br><br><br><br>
some text
<br><br><br><br>
</p>
在保存文档时变成
<p>
some text
</p>
我想保留所有<br>
标签,以允许用户垂直对齐其内容。怎么做?
ContentTools 的默认行为是从标准文本元素(例如段落、标题等)中修剪空格。没有修改此行为的设置(至少目前没有),但如果您需要此行为,您可以修补库来实现此行为。
如何应用补丁取决于您,为了长期支持,最好分叉 ContentEdit 和 ContentTools 库,对 CoffeeScript 进行更新并构建 ContentTools 库的自定义版本,这样至少您可以轻松地合并到未来的更新中(它现在是一个年轻的库,所以我们经常更新)。
或者,如果您现在想要快速解决方案,您可以修改build
文件夹中的content-tools.js
(尽管您可能希望手动缩小它)。
我将在这里描述所需的JS更改(但它们同样容易对CoffeeScript进行(因为它们几乎相同):
找到构造函数代码Text
函数:
function Text(tagName, attributes, content) {
Text.__super__.constructor.call(this, tagName, attributes);
if (content instanceof HTMLString.String) {
this.content = content;
} else {
this.content = new HTMLString.String(content).trim();
}
}
并修改行
this.content = new HTMLString.String(content).trim();
自
this.content = new HTMLString.String(content, true);
这告诉字符串保留空格,并且我们删除了对修剪的调用,这将从字符串中删除所有空格字符(包括<br>
元素)。
然后我们需要修改 HTML 方法,找到 Text
元素的 html
函数:
Text.prototype.html = function(indent) {
var content;
if (indent == null) {
indent = '';
}
if (!this._lastCached || this._lastCached < this._modified) {
content = this.content.copy().trim();
content.optimize();
this._lastCached = Date.now();
this._cached = content.html();
}
return ("" + indent + "<" + this._tagName + (this._attributesToString()) + ">'n") + ("" + indent + ContentEdit.INDENT + this._cached + "'n") + ("" + indent + "</" + this._tagName + ">");
};
并修改行
content = this.content.copy().trim();
自
content = this.content.copy();
同样,在这里我们删除了对trim
的调用。字符串现在将保留空格字符。
最后我们需要修改将 DOM 元素转换为 ContentEdit.Text
实例的方法,找到fromDomElement
方法:
Text.fromDOMElement = function(domElement) {
return new this(domElement.tagName, this.getDOMElementAttributes(domElement), domElement.innerHTML.replace(/^'s+|'s+$/g, ''));
};
并将其替换为:
Text.fromDOMElement = function(domElement) {
return new this(domElement.tagName, this.getDOMElementAttributes(domElement), domElement.innerHTML);
};
应该就是这样,很抱歉现在没有更简单的解决方案,如果你想为辩论做出贡献,之前已经有一些关于这个问题的讨论。
尝试:
<p>
<br> <br> <br> <br>
some text
<br> <br> <br> <br>
</p>
这会在每个中断之间添加一个空格。
用css解决垂直对齐不是更好吗?
- 分派点击事件并保留击键修饰符
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- 如何将字符串拆分为字符,但在javascript中保留空格
- 离开页面导航后保留文本区域内容
- 如何在使用JavaScript或jQuery刷新父页面后保留iframe-src
- 如何停止CKEditor用<br>
- Javascript和RegEx:拆分并保留分隔符
- 如何生成保留标点符号的简单字谜
- 如何设置类型化对象的属性,同时保留它's类型
- 关闭谷歌地图中推荐的骑行道路,但保留专用自行车道
- 在IndexedDB中保留空间
- 修改htmlEntities流行的javascript函数以保留"<br>"子字符串
- 如何使用JavaScript删除html标记只保留BR、B和I标记