ueditor 禁止编辑_织梦ueditor百度编辑器div style被过滤解决办法

3a2c5c47719654b2eb3ed26ac95e70d8.png

开发中有用到开源的富文本编辑器UEditor,在使用的过程中遇到了样式被过滤无法显示问题,经过一番折腾终解决,此外,还有一些关于获取前台界面元素的一些总结。

1. UEditor样式被过滤无法显示问题

上周有用到百度开源的富文本编辑器----UEditor.不得不说这个富文本编辑器做的真的很赞,个人觉得比CKeditor要好用很多,效果也很不错。

但是在使用的过程中,有遇到在向文本编辑器插入HTML文本时,添加的样式老是被过滤掉,找了很多的资料,并结合最新的版本,整理了下如何解决样式过滤的方法。

我们在富文本编辑页点击HTML小图标,切换到HTML模式,然后在该模式下加入如下HTML:

.bg{ background:lightbule;}

Hello EveryBody Welcome To UEditor World!

以上的html意思很简单,就是为div加了一个名为bg 的样式,

然后我们再点击HTML图标,转换到预览页,可以看到我们的div的背景色并没有任何的变化,而且我们在div之前写的样式,也没有被渲染,

反而是以文本的形式显示了出来。F12查看整个页面,发现我们之前写的样式和标签都被渲染成如下的html:

Hello EveryBody Welcome To UEditor World!

由以上代码可以看出,我们的style标签被转换成了div,并且设置样式为不可见,我们的div标签被转换成了p标签。

这说明编辑器本身自己做了一个转换,类似于一个过滤吧,可能是为了出于安全性考虑,防止用户在前段输入非法的代码、脚本等,事实上我觉得这有点多此一举,

既然都让富文本编辑了,不能写html脚本,还叫什么富文本。

然后我们再点击HTML图标,看看HTML试图,内容如下:

Hello EveryBody Welcome To UEditor World!

结合以上分析得出,该编辑器内部过滤机制是将style标记转换为div,而将div等标签以p替代。如何解决呢?

之前有在网上查过相关的资料,都说是在配置文件里有一个黑白名单,然后就在配置文件里找了下,在最新版本的脚本文件里怎么找也没找到那个所谓的黑白名单,

当然了,没有黑白名单也照样可以解决问题的。

首先在ueditor.all.js文件内搜索allowDivTransToP,找到如下的代码,将true设置为false

me.setOpt('allowDivTransToP',false);

//默认的过滤处理

//进入编辑器的内容处理

然后再接着下边的addInputRule方法中将switch代码段中的case style,script都给注释或者删掉。

me.addInputRule(function (root) {

var allowDivTransToP = this.options.allowDivTransToP;

var val;

//进行默认的处理

root.traversal(function (node) {

if (node.type == 'element') {

if (!dtd.$cdata[node.tagName] && me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) {

if (!node.firstChild()) node.parentNode.removeChild(node);

else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) {

node.parentNode.removeChild(node, true)

}

return;

}

//删除switch下的case style 和script

switch (node.tagName) {

case 'a':

if (val = node.getAttr('href')) {

node.setAttr('_href', val)

}

break;

完成以上操作之后,保存即可。再次插入html时,样式就可以显示了。

解释一下以上操作的意义。

第一步将allowDivTransToP设置为false是因为默认的设置是将div自动转换为p,这样写好的样式就找不到相应的div

了,所以才渲染不上的。

第二步将addInputRule函数中的switch 代码段中的case style ,script选择给删除或者注释,是为了避免出现编辑器将style或script自动的转换成别的标签。

好了,大家可以试一试,看看效果。

2.JQuery.attr()与JQuery.css()的区别

之前一直没太区分attr()与css,今天好好看了下,css和attr作用的范围不同,css主要是用来设置样式的,也就是style内的东西,而attr主要是用来设置属性的,比如元素的title,name、style等这些都可以称之为属性,举例说明

而如果我们这样写$("#btn").attr("background","green");不但按钮的背景色不会发生变化,相反该按钮在页面渲染之后又多了一个background的属性,请注意,这里是属性,而不是style里边的background,页面的渲染如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在UEditor编辑器中增加CSS样式,可以通过以下步骤来实现: 1. 打开UEditor的配置文件,一般来说是config.js文件。 2. 在“UEDITOR_CONFIG”对象中添加如下代码: ```javascript // 自定义样式 , 'customstyle':[ { tag:'h1', name:'tc f-26 lh-66', label:'大标题', style:'border-bottom:2px solid #000;font-size:26px;padding:26px 10px 10px;margin:10px 0 20px;' }, { tag:'h2', name:'tc f-20 lh-48', label:'中标题', style:'border-bottom:1px solid #ccc;font-size:20px;padding:10px;margin:10px 0 15px;' }, { tag:'p', name:'tc f-14 lh-30', label:'段落', style:'font-size:14px;line-height:30px;padding:10px;margin:10px 0;' } ] ``` 以上代码中,我们定义了三种自定义样式:大标题、中标题和段落。其中,每种样式都包括了标签、名称、标签显示的文字和CSS样式。 3. 在配置文件中找到“UEDITOR_CONFIG.toolbars”对象,找到需要使用自定义样式的工具栏按钮,例如“字号”按钮,将其配置修改为: ```javascript ['fontfamily', 'fontsize', '|', 'customstyle', 'bold', 'italic', 'underline', 'forecolor', 'backcolor', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|', 'insertimage', 'insertvideo', '|', 'removeformat', 'source'] ``` 4. 保存配置文件,重新加载页面,即可在编辑器中看到自定义样式按钮。选中需要应用样式的文本,点击对应的按钮即可。 至于自动添加<p>标签的问题,可以在配置文件中找到“UEDITOR_CONFIG.filterRules”对象,将其中的“p”标签过滤规则删除即可。具体代码如下: ```javascript , filterRules: { // <!-- 过滤的标签 --> tagNames: { style: true, script: true, div: 1, p: 1 }, ... } ``` 将其中的“p: 1”删除即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值