我正面临ckeditor
中编号列表的问题。当我尝试在li
中加粗一些文本时,只有文本变为粗体,没有前面的数字。这是它的样子,
应该是这样的
2。两个
当我查看来源时,我找到了如下代码
<li><strong>Two</strong></li>
我想知道有没有办法改变bold
按钮的工作方式,以便添加类似下面的内容
<li style="font-weight:bold">Two</li>
<p> Hello <strong>World</strong></p>
答案 0 :(得分:1)
我试图解决你的问题。
我的解决方案不是最好的,因为我想创建一个大胆的插件,关注列表项将是最好的解决方案。
我在不使用jQuery的情况下制作它;但是,使用它代码应该变得更简单,更易读。
首先,我们需要为主要任务定义一些有用的东西:
字符串修剪。请参阅this。
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
};
}
字符串包含。见this
String.prototype.contains = function(it) {
return this.indexOf(it) != -1;
};
第一个子元素。以下函数获取作为参数传递的元素的第一个子元素或非空文本节点
function getFirstChildNotEmpty(el) {
var firstChild = el.firstChild;
while(firstChild) {
if(firstChild.nodeType == 3 && firstChild.nodeValue && firstChild.nodeValue.trim() != '') {
return firstChild;
} else if (firstChild.nodeType == 1) {
return firstChild;
}
firstChild = firstChild.nextSibling;
}
return firstChild;
}
现在,我们可以定义我们需要的两个主要功能:
function removeBoldIfPresent(el) {
el = el.$;
var elStyle = el.getAttribute("style");
elStyle = (elStyle) ? elStyle : '';
if(elStyle.trim() != '' && elStyle.contains("font-weight:bold")) {
el.setAttribute("style", elStyle.replace("font-weight:bold", ''));
}
}
CKEDITOR.instances.yourinstance.on("change", function(ev) {
var liEls = ev.editor.document.find("ol li");
for(var i=0; i<liEls.count(); ++i) {
var el = liEls.getItem(i);
var nativeEl = el.$.cloneNode(true);
nativeEl.normalize();
var firstChild = getFirstChildNotEmpty(nativeEl);
if(firstChild.nodeType != 1) {
removeBoldIfPresent(el);
continue;
}
var firstChildTagName = firstChild.tagName.toLowerCase()
if(firstChildTagName == 'b' || firstChildTagName == 'strong') {
//TODO: you also need to consider the case in which the bold is done using the style property
//My suggest is to use jQuery; you can follow this question: https://stackoverflow.com/questions/10877903/check-if-text-in-cell-is-bold
var textOfFirstChild = (new CKEDITOR.dom.element(firstChild)).getText().trim();
var textOfLi = el.getText().trim();
if(textOfFirstChild == textOfLi) {
//Need to make bold
var elStyle = el.getAttribute("style");
elStyle = (elStyle) ? elStyle : '';
if(elStyle.trim() == '' || !elStyle.contains("font-weight:bold")) {
el.setAttribute("style", elStyle + ";font-weight:bold;");
}
} else {
removeBoldIfPresent(el);
}
} else {
removeBoldIfPresent(el);
}
}
});
您需要使用最新版本的CkEditor(版本4.3)和onchange plugin(默认情况下包含在full package中)。
答案 1 :(得分:0)
CKEditor 4.1删除未在其规则中指定的类,样式和属性。
如果这是问题,您可以通过添加以下行来禁用它:
CKEDITOR.config.allowedContent = true;
以下是使用它的完整代码:
window.onload = function() {
CKEDITOR.replace( 'txt_description' );
CKEDITOR.config.allowedContent = true; //please add this line after your CKEditor initialized
};
请查看here
答案 2 :(得分:-1)
<ul class="test">
<li><span>hello</span></li>
</ul>
.test li
{
font-weight:bold;
}
.test li span
{
font-weight:normal;
}