只剩下小2段...喜欢的朋友...只要把代码加到模板的任何位置就行..
<script type='text/javascript' src='http://www.igogo8.com/js/g.js'></script>
这个是彩字回复!!
表情回复[已加注解]
===========整理更新===========
提问的人依旧很多,因此在此进行整理总结,加上小小更新。
代码如下:其中说明部分(红、绿色)可以删去
<script type="text/javascript">
<!--
function addtext(s){
document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s
}
if(document.getElementById("authcode_td1")){
/**********************自定义部分开始***************************/
//图片地址,分三段:基本地址(所有图片地址相同的部分)、图片文件名、图片扩展名。而一个完整的图片地址就是urlBase+picName+picNameExt组成的。如果使用的图片格式不同,但存在相同的地址部分,则picNameExt="",然后在picName中加上相应的扩展名;如果不存在相同的地址部分,则urlBase="",然后在picName中包含完整图片地址;如果图片格式既不相同,也不存在相同的地址部分,则上述两条综合即可。以下内容的情况下,第一个图标的地址为http://a.yculblog.com/photo/b/b/m002.gif。以此类推。
var urlBase = "http://a.yculblog.com/photo/b/b/";
var picName = new Array("m002", "m034", "m036", "m029", "m020", "m073", "m039", "m040", "m011", "m009", "m010", "m180", "m027", "m025", "m018", "m070", "m023", "m309", "m921");
var picNameExt = ".gif";
//这一部分是关键的部分。smileyCode是表情的代码,一般推荐填写有意义的符号串,当然,图方便也可以用编号。smileyReg是相应表情代码所对应的正则表达式。如果你对正则表达式不熟悉,请不要修改这里的东西。这两个数组中的内容的顺序和上边picName中的顺序是一一对应的。
var smileyCode = new Array("[:-D]", "[:-)]", "[>_<]", "[:-(]", "[;-)]", "[*^_^*]", "[T_T]", "[-_-b]", "[:-O]", "[=_=]", "[#_#]", "[180]", "[@_@]", "[;-_-]", "[^.^]", "[XD]", "[-_-!!]", "[309]", "[921]");
var smileyReg = new Array(/\[:-D\]/g, /\[:-\)\]/g, /\[>_<\]/g, /\[:-\(\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-O\]/g, /\[=_=\]/g, /\[#_#\]/g, /\[180\]/g, /\[@_@\]/g, /\[;-_-\]/g, /\[\^\.\^\]/g, /\[XD\]/g, /\[-_-!!\]/g, /\[309\]/g, /\[921\]/g);
//这里是新增的变量,用于控制每行显示多少个图标,请适度。
var smileyPerLine = 7;
//这里是用于提示的内容,就像回复框的姓名、电邮、个人主页一样。不宜太长。
var strTitle = "图标";
/**********************自定义部分结束***************************/
var i, j;
var s2="";
for(i=0; i < picName.length; i++){
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
if(i>0&&i%(smileyPerLine-1)==0){
s2=s2+"<br />";
}
}
//get target
var inputs = document.getElementsByTagName("input");
var td, tbs;
for(i=0; i < inputs.length; i++){
if(inputs[i].getAttribute("name") == "url"){
tbs = inputs[i].parentNode.parentNode.parentNode;
break;
}
}
//Smiley
var trs = tbs.insertRow(4);
if(trs){
var tds = trs.insertCell(-1);
if(tds){
tds.innerHTML=strTitle;
tds.setAttribute("align", "right");
tds.setAttribute("valign", "top");
tds.style.paddingTop = "20px";
}
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}
}
//parser
var blocks = document.getElementsByTagName("blockquote");
for(i=0; i < blocks.length; i++){
for(j=0; j < smileyReg.length; j++)
blocks[i].innerHTML = blocks[i].innerHTML.replace( smileyReg[j], "<img src='" + urlBase + picName[j] + picNameExt + "' alt='' />" );
}
}
//-->
</script>
===========更新===========
关于如何换行,说明一下:
if(i>0&&i%6==0){
s2=s2+"<br />";
}
加在:
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
后边。
其中的数字6改成每行的个数。
--------------------------===========更新===========
目前的代码有两种版本,一种是
td.innerHTML= td.innerHTML + s2;
将表情图标插在评论框上边的,
另一种是:
td = trs.insertCell(-1);
if(td){
td.innerHTML=s2;
}
针对这两种,首先,需要将代码中的inputs[i].getAttribute("name") == "is_private"中的is_private改成url。
然后对于第二种版本的代码,需要找到var trs = tbs.insertRow(5);一行,将其中的5改为你自己的行号。5的话,应该会在评论框的下边。
原因是不是因为“丢小纸条”,而是因为歪酷把评论“不公开”给去掉了,原来的代码中给表情图标定位是依赖于"不公开"的那个选框的。现在改掉了,改成url,也就是网址的输入框,不论如何,歪酷不会把这个也给去掉吧。
PS:歪酷是不是觉得版聊很猖狂,所以才给加上小纸条的呢?而且似乎小纸条也具有不公开的特性,所以歪酷就索性把不公开给去掉了。
--------------------------
首先,这个东西的功能很简单,就是在评论框上边的"不公开"后边的checkbox的表格单元中,新起一行,将表情图标的html代码(<img />)加进去。然后点击某个图标,就会在评论框中内容的最后加上该图标对应的表情代码(如[:-)])。评论发布后,程序的最后一段专门负责将所有评论(确切的说是所有blockquote)的内容中的表情代码替换成表情图标的html代码。
注意:只适用于所有图标文件来自同一地址同一目录。默认只适用于gif图标文件。若要使用jpg文件,请将代码中的gif替换成jpg。但是,此修改将变成只能使用jpg,而无法使用gif。若要混用,则将代码中的gif删除,在添加文件名的数组中,加上点号和扩展名,应该就可以了。不过估计这种情况十分少见,绝大大部分应该还是gif的。
至于这段脚本的添加位置,最好加在模板代码的包含了{ content }的标签的后边。
比如是<div>{ content }</div>之后,或者是<td>{ content }</td>之后(未经测试)
如果你实在不知道加在什么地方,那么加在模板的##FOOTER##之前应该也是可以的。
转载、使用请注明出处,谢谢
下边是全部代码的注释说明:
<script type="text/javascript">
<!--
//函数 addtext
//用途 将参数s的内容作为字符串添加到评论框中。
function addtext(s){
//考虑到页面上只会有一个评论框存在,因此直接使用getElementsByTagName取得
//得到评论框对象后,将s添加到评论框内容的末尾。
document.getElementsByTagName("textarea")[0].value = document.getElementsByTagName("textarea")[0].value + s
}
//开始主程序
//判断是否在单篇日志的页面,判断方法是页面中是否有验证码
if(document.getElementById("authcode_td1")){
//判断成功
var i, j; //循环计数
//自定义参数之一:
//用于指定图标文件地址的url路径,到最后一层文件夹为止
//也就是说这个url后边就是****.gif的图标文件了。
//可自定义。
var urlBase = "http://booker.yculblog.com/images/smiley/1/";
//自定义参数之二:
//表情图片文件的文件名。紧接着上一参数,不包括点号和扩展名。
//注意:为了缩短代码长度,只考虑这些表情是来自同一地址的同一目录。
//可自定义。
var picName = new Array("1", "2", "3", "4", "5", "6", "7", "8", "10", "11", "19", "20");
//自定义参数之三:
//数组,用于保存图标对应的代码,可自定义。
var smileyCode = new Array("[:-)]", "[:-(]", "[XD]", "[;-)]", "[*^_^*]", "[:-O]", "[o_O]", "[T_T]", "[-_-b]", "[:-D]", "[#_#]", "[^.^]");
//自定义参数之四:
//这个最难,虽然说上边都很好自定义。但这个就有难度了。
//此参数为一个正则表达式数组。用于对应上边的表情代码。
//可自定义。
var smileyReg = new Array(/\[:-\)\]/g, /\[:-\(\]/g, /\[XD\]/g, /\[;-\)\]/g, /\[\*\^_\^\*\]/g, /\[:-O\]/g, /\[o_O\]/g, /\[T_T\]/g, /\[-_-b\]/g, /\[:-D\]/g, /\[#_#\]/g, /\[\^\.\^\]/g);
//定义表情图表列表
var s2 ="<br />";
//根据图标的数量,用循环将所有图表的html代码加在一起
for(i=0; i < picName.length; i++){
//其中有定义了鼠标指针为手,加入了点击事件。
//点击事件调用最初定义的函数addtext
s2 = s2 + "<img src='" + urlBase+picName[i] + ".gif' alt='' style='cursor:pointer;' onclick='addtext(\"" + smileyCode[i] + "\");' />";
}
//定位
//获得当前脚本以前的html代码中的所有的input对象
var inputs = document.getElementsByTagName("input");
var td;//用于保存“不公开”选框外边的td对象
for(i=0; i < inputs.length; i++){
//如果该input对象的name属性为"is_private"
//则就是我们要找的,取得其parentNode,也就是那个td对象
//中止循环
if(inputs[i].getAttribute("name") == "is_private"){
td = inputs[i].parentNode;
break;
}
}
//如果找到该td
if(td){
//取得该td外的tr对象
var tr = td.parentNode;
//将上边生成的表情图标列表添加到复选框的后边(有换行)
td.innerHTML= td.innerHTML + s2;
//将"不公开"三个字所在的表格设为纵向顶端对齐
tr.getElementsByTagName("td")[0].setAttribute("valign", "top");
//开始对已有评论中的表情代码进行替换
//由代码(如[:-)])到图片的html代码
//取得所有的blockquote,因此,也许存在误杀(正文中的blockquote)
var blocks = document.getElementsByTagName("blockquote");
//二重循环,搜索每个blockquote中的每种表情代码,如果有,就替换。
for(i=0; i < blocks.length; i++){
for(j=0; j < smileyReg.length; j++)
blocks[i].innerHTML = blocks[i].innerHTML.replace( smileyReg[j], "<img src='" + urlBase + picName[j] + ".gif' alt='' />" );
}
}
}
//-->
</script>
补充说明 :
虽然在回复别人的评论的时候,也是可以使用表情图标的,不过似乎必须得用表情代码代替。不能那么直观的点点就成。
考虑到一种解决办法,就是写一个Greasemonkey的javascript脚本,用于在管理回复的时候,在页面上显示出可以点击操作的表情图标。这个不是很难。
对于不知道Greasemonkey是什么的人,我只能很抱歉,如果你要回复别人的评论的时候用表情图标,就必须得用表情代码。值得庆幸的是,表情代码是可以自定义的。
再补:
关于使用不同网站的不同目录的不同格式的图片的问题:
首先,如果用不同格式的图片,把代码中的.gif删掉。然后用不同网站不同目录的图片的情况,请把urlBase的值设为空。然后在图片名的数组picName中,使用完整的图片的url就可以了。其实这个urlBase只是为了缩短代码长度。
看来兼容性还是不错的。
--------再补--------
关于增加表情的问题。
首先,回复框的表情列表中的显示数量是由picName中的数量决定的。
其次,如果要增加表情,最好同时在picName、smileyCode和smileyReg中增加。这三者是对应的。要增加更多的图标,就得给出对应的smileyCode和smileyReg。表情代码(smileyCode)可以随便写,但是要在smileyReg中加上对应的正则表达式。
第三,要增加表情图标,请首先确定图标对应的表情代码,然后去简单的学习一下正则表达式,至少要知道正则表达式中有哪些关键字符。然后自己写出对应的正则表达式。虽说有句话叫“好人做到底,送佛送到西”,但是我选择另一句,叫做“授人以鱼不如授人以渔”。
第三,解释一下这个脚本的原理:点击图标,就在留言中插入对应的符号。而另外有一段程序,专门用于把这些符号重新显示成对应的图标。而替换的过程中,就是使用SmileyReg,找到对应的smileyCode,然后再替换成相应的picName。
第四,怀疑歪酷对回复框的后台代码进行了修改,导致原来的[ >_< ]变成了[ >_< ]。要正常显示,请将smileyReg里的/\[>_<\]/g改成/\[>_<\]/g。
来自:石头兔

