uchome 在群租或是记录等处加编辑器(html+js)

2024-04-12 09:38

本文主要是介绍uchome 在群租或是记录等处加编辑器(html+js),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

群组功能发帖时候增加编辑器,其实并不是很复杂,只不过我们要理解,为什么要这样修改代码。

*可能有些听不懂,不过不会影响修改,多学点东西总是好的吧?

 

首先,我们解析一下blog的编辑器。

看模板文件夹下cp_blog.htm里面的这段代码:

 

代码:

 

<textarea class=”userData” name=”message” id=”uchome-ttHtmlEditor” style=”height:100%;width:100%;display:none;border:0px”>$blog[message]</textarea>
<iframe src=”editor.php?charset=$_SC[charset]&allowhtml=$allowhtml” name=”uchome-ifrHtmlEditor” id=”uchome-ifrHtmlEditor” scrolling=”no” border=”0″ frameborder=”0″ style=”width:100%;border: 1px solid #C5C5C5;” height=”400″></iframe>

第一步呢,我们先要读懂这两行代码:

这就是编辑器的比较核心的部分,用一个隐藏的textarea来提交信息,用js提取框架iframe里面的编辑内容,而iframe里面的部分是编辑器页面。

display:none 表示用css隐藏了textarea,看不到但是提交信息是可以发出去的。

我们会发现,textarea的iduchome-ttHtmlEditor和iframe里面的name和id都很像,对,这两个能合并在一起就是用这个挂钩的,当然,还要借助于js实现。

 

第二步,再看提交的时候,触发了什么,请看这两段代码,还是那个文件。

 

代码:

 

<input type=”button” id=”blogbutton” name=”blogbutton” value=”提交发布” onclick=”validate(this);” style=”display: none;” />

 

 

代码:

 

<input type=”button” id=”issuance” onclick=”document.getElementById(’blogbutton’).click();” value=”保存发布” class=”submit” />

 

如果刚才认真听课的同学都发现了,“display: none”又一次使用到了隐藏。

但是提交的时候更有趣:

下面的按钮触发的是上面按钮的动作,怎么做到的呢?

 

代码:

 

 

onclick=”document.getElementById(’blogbutton’).click();” 

 

这行代码表示在点击的时候,触发一个js事件:document.getElementById(’blogbutton’).click();

而这个事件的js实际上就是点击第一个按钮的动作,等同于触发了第一个按钮的:

 

代码:

 

onclick=”validate(this);” 

 

这个部分,那么我们就找到了提交的时候,一定会包含处理编辑器的js函数:validate

 

搜索刚才那个文件中的代码,我们很容易找到这段:

 

代码:

 

 1        function validate(obj) {
 2 
 3             var subject = $(’subject’);
 4 
 5             if (subject) {
 6 
 7                     var slen = strlen(subject.value);
 8 
 9                 if (slen < 1 || slen > 80) {
10 
11                     alert(”标题长度(1~80字符)不符合要求”);
12 
13                     subject.focus();
14 
15                     return false;
16 
17                 }
18 
19             }
20 
21  
22 
23             if($(’seccode’)) {
24 
25                         var code = $(’seccode’).value;
26 
27                         var x = new Ajax();
28 
29                         x.get(’cp.php?ac=common&op=seccode&code=’ + code, function(s){
30 
31                                 s = trim(s);
32 
33                                 if(s != ’succeed’) {
34 
35                                         alert(s);
36 
37                                         $(’seccode’).focus();
38 
39                                    return false;
40 
41                                 } else {
42 
43                                         uploadEdit(obj);
44 
45                                         return true;
46 
47                                 }
48 
49                         });
50 
51             } else {
52 
53                     uploadEdit(obj);
54 
55                     return true;
56 
57             }
58 
59         }

 

这个东西什么意思呢?我们大概看看,我也作简要解释:

function是函数必须的部分,后面表示 validate(obj)函数名和所传递进来的参数。参数是一个对象,所以用obj来命名,不是语法必须,只是比较方便理解。

然后定义了另外一个对象,在函数内部: var subject = $(’subject’);

表示将id为’subject’的部分当作对象给前面的变量,听不懂这些术语没所谓,以后会明白,不会影响这次你学习哦。

 

有这样的对象有啥用啊?

这样的对象可以直接指向某个DOM的节点,更简单的说法是方便操作部分指定的html,哈哈,这样理解了吧?

 

再看这个js函数。我用注释来说明每一行做什么:

 

代码:

1  function validate(obj) {//创建函数和函数名,声明需要传入什么参数
 2 
 3             var subject = $(’subject’);//设定一个函数内的变量,方便后面用,指向了id为subject的html部分。
 4 
 5             if (subject) {//如果有这个对象,可以理解成,如果有这个html的话
 6 
 7                     var slen = strlen(subject.value);//读取这个html部分的value值的长度
 8 
 9                 if (slen < 1 || slen > 80) {//判断长度是否超过80或者小于1.
10 
11                     alert(”标题长度(1~80字符)不符合要求”);//提示不合法
12 
13                     subject.focus();//将光标焦点放到指定的对象上
14 
15                     return false;//返回这个函数的返回值为否(假),目的是告诉浏览器不要继续表单提交了,有问题啦。如果运行到这里,整个函数结束,不再继续运行。但是,刚才的判断部分如果没有进入这个大括号的话,程序继续运行。细节部分参考一下相关描述js函数的书籍或资料,不详细说了。
16 
17                 }
18 
19             }
20 
21  
22 
23             if($(’seccode’)) {//这个是判断’seccode’部分的,有ajax的部分,跳过大部分,我只简单说,我们直接谈中心部分。
24 
25                         var code = $(’seccode’).value;//读取’seccode’的值
26 
27                         var x = new Ajax();//创建一个ajax的实例,理解为要做ajax之前的热身,不然程序容易抽筋,那就不能继续了,呵呵
28 
29                         x.get(’cp.php?ac=common&op=seccode&code=’ + code, function(s){//将’cp.php?ac=common&op=seccode&code=’ + code作为ajax异步传输读取的地址,返回的是这个地址给的结果,也就是s
30 
31                                 s = trim(s);//安全处理s
32 
33                                 if(s != ’succeed’) {//如果s不是’succeed’的话,则运行下面的部分。
34 
35                                         alert(s);//警告,内容就是s,估计如果s不是’succeed’的话,会直接返回错误提示。
36 
37                                         $(’seccode’).focus();//呵呵,上面见过,将鼠标光标放到’seccode’上。
38 
39                                    return false;//返回别继续的指令,刚才说过。
40 
41                                 } else {//否则运行(也就是说s的内容就是’succeed’)
42 
43                                         uploadEdit(obj);//哈哈,bingo~~~就是要照这个,更新编辑器的函数
44 
45                                         return true;//告诉浏览器,哈哈,正确了,提交吧,我拿到了编辑器的数据啦~~~
46 
47                                 }
48 
49                         });
50 
51             } else {//这两行自己理解一下,自己看看括号是哪里的if和else,如果不知道if-else是什么,参考我之前发过的教程。
52 
53                     uploadEdit(obj);
54 
55                     return true;
56 
57             }
58 
59         }

这样我们就找到要得部分了,估计现在有些朋友会晕了,“改一个编辑器这么麻烦啊?”

是啊,如果你熟练的话,其实也不会特别麻烦,所以提醒某些喜欢免费的朋友,无论大家分享什么东西,都要懂得感恩,很多细节的部分你是看不到的,但是很有可能人家用心坐了很久,扯远了,我们继续哦

 

找到刚才那个地方,也就是uploadEdit(obj);

这还不够,你并不了解他具体是怎么运行的,确认一下,看看他在那里呢?

 

找了这个文件没有发现声明这个函数的部分,也就是没有找到 function uploadEdit

 

再看看代码,发现这个:

 

代码:

<script language=”javascript” src=”image/editor/editor_function.js”></script>

 

 

*html中包含js的一种方法,具体参考html相关书籍和资料

 

好,开心吧,为什么呢?因为这个就是编辑器js的函数集文件了,马上打开看看吧,很快找到(第一个函数就是啊):

 

代码:

 

function uploadEdit(obj) {

        mainForm 
= obj.form;

        forms 
= $(’attachbody’).getElementsByTagName(”FORM”);

        albumid 
= $(’uploadalbum’).value;

        edit_save();

        upload();

}

 

<textarea class=”userData” name=”message” id=”uchome-ttHtmlEditor” style=”height:100%;width:100%;display:none;border:0px”>$blog[message]</textarea>
<iframe src=”editor.php?charset=$_SC[charset]&allowhtml=$allowhtml” name=”uchome-ifrHtmlEditor” id=”uchome-ifrHtmlEditor” scrolling=”no” border=”0″ frameborder=”0″ style=”width:100%;border: 1px solid #C5C5C5;” height=”400″></iframe>

2、用户继续编辑其他的部分,当要提交的时候,用一个隐藏按钮提交内容:

 

代码:

 <input type=”button” id=”blogbutton” name=”blogbutton” value=”提交发布” onclick=”validate(this);” style=”display: none;” />

代码:

 

<input type=”button” id=”issuance” onclick=”document.getElementById(’blogbutton’).click();” value=”保存发布” class=”submit” />

3、触发了js函数validate,这个函数又一次触发了编辑器更新的函数uploadEdit。

 

代码:

 

1 function validate(obj) {//创建函数和函数名,声明需要传入什么参数
 2 
 3             var subject = $(’subject’);//设定一个函数内的变量,方便后面用,指向了id为subject的html部分。
 4 
 5             if (subject) {//如果有这个对象,可以理解成,如果有这个html的话
 6 
 7                     var slen = strlen(subject.value);//读取这个html部分的value值的长度
 8 
 9                 if (slen < 1 || slen > 80) {//判断长度是否超过80或者小于1.
10 
11                     alert(”标题长度(1~80字符)不符合要求”);//提示不合法
12 
13                     subject.focus();//将光标焦点放到指定的对象上
14 
15                     return false;//返回这个函数的返回值为否(假),目的是告诉浏览器不要继续表单提交了,有问题啦。如果运行到这里,整个函数结束,不再继续运行。但是,刚才的判断部分如果没有进入这个大括号的话,程序继续运行。细节部分参考一下相关描述js函数的书籍或资料,不详细说了。
16 
17                 }
18 
19             }
20 
21  
22 
23             if($(’seccode’)) {//这个是判断’seccode’部分的,有ajax的部分,跳过大部分,我只简单说,我们直接谈中心部分。
24 
25                         var code = $(’seccode’).value;//读取’seccode’的值
26 
27                         var x = new Ajax();//创建一个ajax的实例,理解为要做ajax之前的热身,不然程序容易抽筋,那就不能继续了,呵呵
28 
29                         x.get(’cp.php?ac=common&op=seccode&code=’ + code, function(s){//将’cp.php?ac=common&op=seccode&code=’ + code作为ajax异步传输读取的地址,返回的是这个地址给的结果,也就是s
30 
31                                 s = trim(s);//安全处理s
32 
33                                 if(s != ’succeed’) {//如果s不是’succeed’的话,则运行下面的部分。
34 
35                                         alert(s);//警告,内容就是s,估计如果s不是’succeed’的话,会直接返回错误提示。
36 
37                                         $(’seccode’).focus();//呵呵,上面见过,将鼠标光标放到’seccode’上。
38 
39                                    return false;//返回别继续的指令,刚才说过。
40 
41                                 } else {//否则运行(也就是说s的内容就是’succeed’)
42 
43                                         uploadEdit(obj);//哈哈,bingo~~~就是要照这个,更新编辑器的函数
44 
45                                         return true;//告诉浏览器,哈哈,正确了,提交吧,我拿到了编辑器的数据啦~~~
46 
47                                 }
48 
49                         });
50 
51             } else {//这两行自己理解一下,自己看看括号是哪里的if和else,如果不知道if-else是什么,参考我之前发过的教程。
52 
53                     uploadEdit(obj);
54 
55                     return true;
56 
57             }
58 
59         }
60 

 

 

4、我们追寻找到那个函数,终于了解,最终更新编辑器的中心函数是edit_save();

 

代码:

 

<script language=”javascript” src=”image/editor/editor_function.js”></script>

代码:

 1 function uploadEdit(obj) {
 2 
 3         mainForm = obj.form;
 4 
 5         forms = $(’attachbody’).getElementsByTagName(”FORM”);
 6 
 7         albumid = $(’uploadalbum’).value;
 8 
 9         edit_save();
10 
11         upload();
12 
13 }

我们知道了这些,就可以照猫画虎的制作出来任何地方的编辑器了。

 

附加解释一下edit_save()的内部结构,有朋友可能会问到,还是用注释来解释(之前讲过的部分就不说了,仔细看着个帖子就好):

 

代码:

 

 

edit_save();???这个就是保存编辑器内容的东西吧,答对,加十分,哈哈

 

我们拿出来这个函数直接用,因为刚才那个文件已经引用过这个文件了,也就是刚才那句代码:

 

代码:

 

<script language=”javascript” src=”image/editor/editor_function.js”></script>

 

怎么直接用,估计你也会了,复制,粘贴呗……

 

返回cp_blog.htm文件,我们再次理顺这个流程,我考虑将具体代码修改部分留给各位朋友,多测试,一定会有人做出来的,并不是很难。

 

编辑器运行的过程是这样的:

1、用户首先在这部分使用编辑器输入了想要的内容,编辑器直接呈现了效果,但是资料还是在iframe里面,没有传送到textarea部分:

 

代码:

这篇关于uchome 在群租或是记录等处加编辑器(html+js)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896774

相关文章

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled