我正在使用CKEditor,我只想缩进段落的第一行。我之前所做的是单击“Source”并编辑<p>
要包含的样式text-indent:12.7mm;
,但是当我再次单击“Source”以返回普通编辑器时,我的更改消失了,我不知道为什么。
我的偏好是创建一个自定义工具栏按钮,但我不确定如何这样做或在哪里编辑,以便单击自定义按钮将<p>
使用我希望它具有的样式属性进行编辑。
我正在使用CKEditor,我只想缩进段落的第一行。我之前所做的是单击“Source”并编辑<p>
要包含的样式text-indent:12.7mm;
,但是当我再次单击“Source”以返回普通编辑器时,我的更改消失了,我不知道为什么。
我的偏好是创建一个自定义工具栏按钮,但我不确定如何这样做或在哪里编辑,以便单击自定义按钮将<p>
使用我希望它具有的样式属性进行编辑。
根据您使用的 CKE 版本,您的更改很可能会消失,因为内容中不允许使用style
属性或样式。text-indent
这是由于 CKEditor 的允许内容过滤器功能,请在此处阅读更多信息:http ://docs.ckeditor.com/#!/guide/dev_advanced_content_filter
就像 Ervald 在评论中所说,您也可以使用 CSS 来执行此操作而无需手动添加代码 - 但是,您的定位选项是有限的。您必须针对所有段落或将 id 或 class 属性添加到您的段落并将其定位。或者,如果您使用选择器,例如:first-child
您被限制为始终仅缩进第一个元素(这可能是您想要的,我不知道:D)。
要像这样使用 CSS,您必须将相关代码添加到contents.css
编辑器内容中使用的 CSS 文件,并且您必须在输出编辑器内容的任何位置包含它。
在我看来,最好的解决方案确实是制作一个插件,在工具栏上放置一个图标,并且单击该按钮时,会在当前活动段落中添加或删除诸如“indentMePlease”之类的类。开发所说的插件非常简单且有据可查,请参阅http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1上的优秀示例- 如果您需要更多信息或对此有疑问,请在评论中提问 :)
如果你这样做,你再次需要在 contents.css 和输出页面中添加“indentMePlease”样式实现。
我有一种方法可以在不使用样式的情况下缩进第一行,因为我使用 iReport 来生成自动报告。Jasper 不懂风格。因此,我通过 jQuery 为 CKEditor 4.6 的主 iframe 分配了一个 onkeydown 方法,并检查了 TAB 和 Shift 键来执行和撤消第一行缩进。
// TAB
$(document).ready(function(){
startTab();
});
function startTab() {
setTimeout(function(){
var $iframe_document;
var $iframe;
$iframe_document = $('.cke_wysiwyg_frame').contents();
$iframe = $iframe_document.find('body');
$iframe.keydown(function(e){
event_onkeydown(e);
});
},300);
}
function event_onkeydown(event){
if(event.keyCode===9) { // key tab
event.preventDefault();
setTimeout(function(){
var editor = CKEDITOR.instances['editor1'], //get your CKEDITOR instance here
range = editor.getSelection().getRanges()[0],
startNode = range.startContainer,
element = startNode.$,
parent;
if(element.parentNode.tagName != 'BODY') // If you take an inner element of the paragraph, get the parentNode (P)
parent = element.parentNode;
else // If it takes BODY as parentNode, it updates the inner element
parent = element;
if(event.shiftKey) { // reverse tab
var res = parent.innerHTML.toString().split(' ');
var aux = [];
var count_space = 0;
for(var i=0;i<res.length;i++) {
// console.log(res[i]);
if(res[i] == "")
count_space++;
if(count_space > 8 || res[i] != "") {
if(!count_space > 8)
count_space = 9;
aux.push(res[i]);
}
}
parent.innerHTML = aux.join(' ');
}
else { // tab
var spaces = " ";
parent.innerHTML = spaces + parent.innerHTML;
}
},200);
}
}