开发中有用到开源的富文本编辑器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,页面的渲染如下:

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

  1. 织梦网站调用变量失败_织梦dedecms无法调用新添加变量的解决办法

    织梦dedecms无法调用新添加变量:在项目中使用了几次织梦cms程序,感觉越来越好用,以前刚接触dedecms时一看后台界面,如此之乱,使我心乱如麻,不知从何下手.后来因为工作逐渐就熟悉了它的后台. ...

  2. 织梦新建顶级栏目打不开,解决办法

    织梦新建顶级栏目打不开,解决办法 问题:织梦网站,新建一个栏目,地址是:/xinjianlanmu/,然后更新后,首页连接地址是http://www.*******.cn/xinjianlanmu/, ...

  3. inc fun funadmin.php,织梦安装百度编辑器

    //百度编辑器 else if($GLOBALS['cfg_html_editor']=='ueditor') { $fvalue = $fvalue=='' ? ' $code = ''; $cod ...

  4. 织梦模板安装后不能显示css的解决办法

    笔者下载了无数套模板,有带数据的,有不带数据的,有整套网站程序的,有只有模板文件的. 这么多模板中就只有一套只有模板文件的,能显示出"部分"css,主页上还有部分图片不能正常显示的 ...

  5. 织梦安装百度编辑器UEditor

    1.下载地址:https://ueditor.baidu.com/website/download.html 2.解压到include里更换名字ueditor 找到inc里的inc_func_func ...

  6. 织梦charset.func.php,织梦程序百度php主动推送代码,亲测可用!

    随着百度生态环境及算法改变,内容质量对于搜索引擎来说越来越重要了,那么信息的实时传达到蜘蛛抓取是每位站长必须做到的事情了,链接提交工具是网站主动向百度搜索推送数据的工具,工具可缩短爬虫发现网站链接时间 ...

  7. 织梦插件织梦CMS百度收录查询及批量推送未收录插件

    织梦插件织梦CMS百度收录查询及批量推送未收录插件 织梦百度收录查询插件说明 1.支持gbk和utf8编码2种程序 2.支持分批查询收录情况,无畏大量文章数据 3.支持指定栏目查询收录情况 4.支持关 ...

  8. 织梦熊掌号插件兼容php5.3,织梦CMS百度、熊掌号、MIP、神马自动推送插件

    插件名称: 织梦CMS百度.熊掌号.MIP.神马自动推送插件(支持手机端采集侠火车头等采集后推送)(UTFT-8+GBK2312) 插件介绍: 织梦自动推送百度.熊掌号.MIP.神马插件设置界面截图: ...

  9. dedecms织梦系统后台验证码图片不显示的解决方法

    dedecms织梦系统后台验证码图片不显示的解决方法 参考文章: (1)dedecms织梦系统后台验证码图片不显示的解决方法 (2)https://www.cnblogs.com/afish/p/40 ...

  10. html编辑器查找与替换,织梦kindeditor文本编辑器增加“查找替换”功能

    织梦kindeditor文本编辑器增加"查找替换"功能效果演示 1.items 里面增加 search 按钮 ['source','|','undo','redo','|','pr ...

最新文章

  1. 二分图HK算法[数论+二分图最大独立集]:Lightoj1356
  2. 微信小程序上传图片时provisional headers are shown显示我的错误解决方案
  3. 关于python2和python3除法的区别
  4. PyQt5 技术篇-QWidget、QDialog程序窗口关闭closeEvent()触发事件方法重写
  5. make -j 的并行任务个数选择
  6. Java实现插入排序及其优化 Shell Sort
  7. Android的Touch系统简介(一)
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的教材管理系统
  9. 九度搜索引擎点击优化_深圳坂田企业老总在想竞价推广和网站优化选哪个?
  10. 后缀表达式/逆波兰表达式
  11. 解决打开pdf时“在禁用UAC时,无法激活此应用”
  12. Juce Programming Tutorial by haydxn 教程分享
  13. 诚邀参加“低噪声飞秒激光”( 上海交大)研讨会
  14. [导入]锐道dorado
  15. 【文献阅读】Optimistic Bull or Pessimistic Bear: Adaptive Deep Reinforcement Learning for Stock Portfolio
  16. JPEG、GIF、PNG、BMP哪种图片格式的图片清晰一点
  17. classes是什么意思怎么读_class是什么意思_class怎么读_class翻译_用法_发音_词组_同反义词_班-新东方在线英语词典...
  18. js设置北京时区_如何使不同时区的时间与京8区一致?(JS实现)
  19. 秀米怎么添加附件链接
  20. HTTP状态代码(各种错误代码集合)超全

热门文章

  1. Building a Better Vocabulary: Lecture 1 Five Principles for Learning Vocabulary
  2. 20191205每日一句
  3. 190109每日一句
  4. 扇贝有道180923每日一句
  5. HTC vive追踪定位原理与精度
  6. Atitit.常见的异常分类 目录 1. 双元分类法 1 1.1. 按照语言分 java js c# php等 1 1.2. 通用常见异常vs 特定异常 1 1.3. Runtime ex vs c
  7. Atitit 知识点 文章 框架 结构 大纲 attilax 总结 艾提拉总结 技术掌握文档总结的 v5 s420.docx 1.1. Preface前言 序言 1 2. 技术流程了解》》选型(标准
  8. Atitit 封装的艺术 目录 1.1. 规范是不暴露特有的api 1 1.2. 方便理解,提升可读性 1 1.3. Atitit 提升可读性 数据结构特殊化专用api 比较通用的对象
  9. Atitit.词法分析的理论原理 part2
  10. paip.注册java程序为LINUX系统服务的总结。