下面是一个表情列表,为了简单我直接在li里面放图片的文件名称,而class 属性用来存放对应的标记
接下来把上面的 li 变成 img
var faceDir=”images/”; //配置表情目录
var iframeDocument=null;
var iframeWindow=null;
var isIe=false;
$.each($(“#faceList>li”), function(){ //展现表情
var node=document.createElement(“img”);
node.className=$(this).attr(“class”);
node.src=https://www.jb51.net/article/faceDir+$(this).html();
this.innerHTML=””;
this.appendChild(node);
});
放一个 iframe 用来做编辑器
先得到 ifame
iframeWindow=document.getElementById(“Edit”).contentWindow;iframeDocument=document.getElementById(“Edit”).contentWindow.document; iframeDocument.designMode=”On”; //打开iframe 编辑模式
.designMode=”On”; 这个方法还是蛮常见的。 刚开始做的时候还想用 textarea 但是textarea不能显示图片。这里在实际过程中发现与 textarea 的一个差异,iframe 内不会自己换行,所以为iframe 添加了一个body设置了一个word-wrap属性
iframeDocument.write(“”);
下面实现,在iframe 插入图片表情的过程(代码内有注释)
$(“#faceList>li”).click(function(){
var $this=$(this);
var $thisImg=$(this).find(“img:eq(0)”); //当前点击的表情(IMG标记)
document.getElementById(“Edit”).contentWindow.focus(); //使编辑区域得到焦点
var r=null;
if(document.selection) //处理兼容性问题
{
//把表情放入iframe
r=iframeDocument.selection.createRange();
iframeDocument.selection.empty();
r.pasteHTML($thisImg[0].parentNode.innerHTML.toString());
}
else if(window.getSelection)
{
r=iframeWindow.getSelection().getRangeAt(0);
iframeWindow.getSelection().removeAllRanges();
var node=document.createElement(“img”);
node.className=$thisImg.attr(“class”);
node.src=https://www.jb51.net/article/$thisImg.attr(“src”);
r.surroundContents(node);
}
});
到这里,就完成了插入表情的过程。还有最后一件事情:翻译img 标记
function GeteEditData()
{
var edit=iframeDocument.getElementsByTagName(“body”)[0].innerHTML;
//在内存中Copy一个该节点副本,以保全文档流格式
var str=new String(edit);
var $content=$(“
“);
var imgNode=$(“#faceList img”);
$.each(imgNode, function(){
var mark=”/:”+$(this).attr(“class”).toString();
var fs=$content.find(“.”+$(this).attr(“class”).toString());
if(fs!=null&&fs[0]!=undefined)
{
fs.replaceWith(mark);
}
});
}
其实还有很多问题没有处理,俺也只是一知半解。把代码贴出来希望能帮助一些朋友解决问题。