如何在 ckeditor 中换行所选文本
How to wrap selected text in ckeditor
我想将选定的单词包装在<p>
元素中CKEditor
。
从:
<p>This is a paragraph. And this is Selected text.</p>
自:
<p>This is a paragraph. And this is</p>
<p class="myclass">Selected text.</p>
我找到了一些代码:
( function() {
CKEDITOR.plugins.add( 'qna', {
init: function( editor ) {
editor.addCommand( 'insertQnA', {
exec : function( editor ) {
if(CKEDITOR.env.ie) {
editor.getSelection().unlock(true);
var selected_text = editor.getSelection().getNative().createRange().text;
} else {
var selected_text = editor.getSelection().getNative();
}
editor.insertHtml('[before]' + selected_text + '[after]');
}
});
editor.ui.addButton( 'qna', {
label: 'Insert QnA',
command: 'insertQnA',
icon: this.path + 'images/qna.png'
});
}
});
})();
我想用<p class"myclass">
和</p>
替换[before]
和[after]
,但它不起作用。
我是JS/Jquery的新手。我希望你能为我提供一些启示。
编辑:来自Spon的回复。
( function() {
CKEDITOR.plugins.add( 'qna', {
init: function( editor ) {
editor.addCommand( 'insertQnA', {
exec : function( editor ) {
editor.applyStyle(new CKEDITOR.style({
Element : 'p',
Attributes : { class : 'Myclass' },
Styles : { color : '#ff0000','font-family' : 'Courier'}
}));
}
});
editor.ui.addButton( 'qna', {
label: 'Insert QnA',
command: 'insertQnA',
icon: this.path + 'images/question.png'
});
}
});
})();
上面的代码出于某种未知原因将选定的文本/单词包装在 <span>
元素中。
例:
从。。。
<p>This is a paragraph. And this is Selected text.</p>
自。。。
<p>This is a paragraph. And this is <span>Selected text.</span></p>
这不是我想要的。
exec : function( editor ) {
var selected_text = editor.getSelection().getSelectedText(); // Get Text
var newElement = new CKEDITOR.dom.element("p"); // Make Paragraff
newElement.setAttributes({style: 'myclass'}) // Set Attributes
newElement.setText(selected_text); // Set text to element
editor.insertElement(newElement); // Add Element
}
这将修复它..如您所见,这是执行部分。
重复参见 堆栈溢出:Ckeditor 选择包装
editor.applyStyle(new CKEDITOR.style({Element : 'p', Attributes : { class : 'Myclass' }, Styles : { color : '#ff0000','font-family' : 'Courier' } ));
这段代码确保如果你有多个块级选择,你将保持相同的结构。(如果你让你的p.myclass内联偏离(。
<p>This is a paragraph. And this is </p><p> Selected text.</p>
此示例将被合并并输出为:
<p>This is a paragraph. </p><p class="myClass">And this is Selected text.</p>
但是这个例子:
<div>This is a paragraph. And this is</div><div> Selected text.</div>
此示例将被合并并输出为:
<div>This is a paragraph. <P class="myclass">And this is</p></div><div><P class="myclass"> Selected text.</p></div>
值得注意的是,CKEDITOR.style 语法在 CKEditor 4 中(显然(发生了变化; 要使用 editor.applyStyle(((在某些情况下更可取,这样您就不会得到一堆嵌套的 HTML(,请将问题的第二个示例中的editor.applyStyle()
节更改为:
editor.applyStyle(new CKEDITOR.style({
element : 'p',
attributes : { class : 'Myclass' },
styles : { color : '#ff0000','font-family' : 'Courier'}
})
);
请注意,现在的键都是小写的。
如果他们能记录下来,那将非常有帮助——目前唯一的文件说"TODO......"!
如果您想要一个既适用于选择文本又适用于任意数量元素的通用解决方案,那么这将起作用:
var selectedHtml = "";
var selection = editor.getSelection();
if (selection) {
selectedHtml = getSelectionHtml(selection);
}
editor.insertHtml('something' + selectedHtml + 'something');
您将需要两个附加功能:
/**
Get HTML of a range.
*/
function getRangeHtml(range) {
var content = range.extractContents();
// `content.$` is an actual DocumentFragment object (not a CKEDitor abstract)
var children = content.$.childNodes;
var html = '';
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (typeof child.outerHTML === 'string') {
html += child.outerHTML;
} else {
html += child.textContent;
}
}
return html;
}
/**
Get HTML of a selection.
*/
function getSelectionHtml(selection) {
var ranges = selection.getRanges();
var html = '';
for (var i = 0; i < ranges.length; i++) {
html += getRangeHtml(ranges[i]);
}
return html;
}
请注意,在 CKEditor 4.5 中,您实际上具有getHtml
函数getRangeHtml
因此可以使用 content.getHtml()
来简化。请参阅文档片段文档。
它适用于 ckeditor 中的图像和文本
var selection = CKEDITOR.instances['content'].getSelection();
if (selection.getType() == CKEDITOR.SELECTION_ELEMENT) {
var selectedContent = selection.getSelectedElement().$.outerHTML;
} else if (selection.getType() == CKEDITOR.SELECTION_TEXT) {
if (CKEDITOR.env.ie) {
selection.unlock(true);
selectedContent = selection.getNative().createRange().text;
} else {
selectedContent = selection.getNative();
console.log("The selectedContent is: " + selectedContent);
}
}
此处内容是文本区域 ID
此代码示例为CK编辑器添加带有按钮的插件,该编辑器将html与类"vip-content"包装在一起。这处理每种类型的元素:在文本内单击,单击元素(例如img(或选择某些元素(某些代码行(。
(function () {
const WRAP_CONTENT_CLASS = 'vip-content';
function getSelectionHtml(selection) {
var ranges = selection.getRanges();
var html = '';
for (var i = 0; i < ranges.length; i++) {
html += ranges[i].extractContents().getHtml();
}
return html;
}
CKEDITOR.plugins.add('wrapcontent', {
init: function (editor) {
editor.addCommand('WrapContent', {
exec: function () {
var selection = editor.getSelection();
var div = new CKEDITOR.dom.element('div').addClass(WRAP_CONTENT_CLASS);
// Process element
if (selection.getSelectedElement()) {
div.append(selection.getSelectedElement());
editor.insertElement(div);
return;
}
if (selection.getNative().type === 'Caret') {
editor.applyStyle(new CKEDITOR.style({
element: 'div',
attributes: {class: WRAP_CONTENT_CLASS},
}));
} else {
var html = getSelectionHtml(selection);
if (html !== '') {
div.setHtml(html);
editor.insertElement(div);
}
}
}
});
editor.ui.addButton('WrapContent', {
label: 'Wrap content',
toolbar: 'insert',
command: 'WrapContent',
icon: this.path + 'icons/icon.png'
});
}
});
})();
我发现这种方式可以更好地获得样式的添加-删除 efecto:
CKEDITOR.plugins.add('my_style', {
init: function (editor) {
'use strict';
editor.addCommand('my_style', {
exec: function (editor) {
var myStyle = new CKEDITOR.style({
element: 'span',
attributes: {class: 'my_style'}
});
if (myStyle.checkActive(editor.elementPath(), editor)) {
editor.removeStyle(myStyle);
} else {
editor.applyStyle(myStyle);
}
}
});
}
});
- Internet Explorer中的文本换行错误
- 使用jQuery的输入字段文本换行
- 脚本图像获胜't用文本换行
- D3具有矩形和文本换行的水平树布局
- 标记内的文本换行
- 使用 jQuery 将文本换行在
标记内 - 如何在文本换行时在图像下方保留填充
- 溢出隐藏不会文本换行
- d3.js径向树布局可变节点长度/文本换行节点描述
- 如何手动管理HTML中的文本换行
- jQuery动画slidelleft没有文本换行
- 将文本换行到并由
使用jquery - 文本换行到列
- 如何在文本换行时减少字母间距
- 文本换行选项-建议
- 围绕span文本换行元素
- 在Polymer 1.0中带有绑定的文本换行元素
- Var文本换行或任何格式不工作
- 如何在javascript中拖动图像/元素时导致实时文本换行
- 使用 javascript/jquery 将带有强标签的文本区域中突出显示的文本换行