html语言文字编辑器换行,html编辑器回车换行如何指定为br

用iframe作为html编辑器或者web编辑器的容器时,如果不做特殊处理,不同浏览器下对回车的生成的html代码不全相同(主要是低版本的IE浏览器,如IE8-)。firefox和chrome对回车生成的html代码是br,而IE下是P标签。

要想规范html编辑器响应回车按键,生成统一的标签,如
换行,可以给iframe编辑器容器添加keydown事件,阻止默认的浏览器事件,然后用js代码控制html的生成。

测试源代码如下,只测试了IE8-,firefox12和chrome38,高版本IE(IE9+不知道效果。)

1507093467.jpg

html编辑器回车换行生成br标签

function getHtml() { alert(frames["richEdit"].document.body.innerHTML.replace(/\u200B/g, '')) }

function keydown(e) {

e = e || window.event;

if (e.keyCode == 13) {

e.preventDefault && e.preventDefault();

var doc = frames["richEdit"].document, sel = doc.selection, rng;

if (sel) {//IE浏览器

rng = sel.createRange();

rng.pasteHTML('
');

rng.move("character", 1);

rng.select();

rng.collapse(true);

}

else {//W3C浏览器

sel = doc.getSelection(); rng = sel.getRangeAt(0);

var br = doc.createElement('br');

var nrng = doc.createRange();

w = doc.createTextNode('\u200B'); //借鉴kindeditor编辑器,插入“零宽度非连接空格”,获取内部html代码时需要用正则去掉这个内容

rng.insertNode(w);//插入“零宽度非连接空格”,注意这2个内容的插入循序,不能反,具体原因看Range对象的insertNode方法说明

rng.insertNode(br);//插入br

nrng.selectNode(w);//新range选中“零宽度非连接空格”内容

sel.removeAllRanges();//移除原来的选择

sel.addRange(nrng);//选择添加新rang

sel.collapse(w, 1);//闭合光标到“零宽度非连接空格”之后

}

return false;

}

}

window.onload = function () {

frames["richEdit"].document.designMode = "on";

//IE下不用计时器延时执行代码,获取到的frames['richEdit'].document会为空导致出错

setTimeout(function () {

var editor = frames['richEdit'].document.body;

editor.addEventListener ? editor.addEventListener('keydown', keydown, true) : editor.attachEvent('onkeydown', keydown);

}, 10);

}

主要使用到了selection和range 2个主要的对象,具体参考,前2个是w3c浏览器标准,最后的为IE

加支付宝好友偷能量挖...

2014-11-5Web开发网

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值