如何做到编辑像文本域,又能够即时所见呢?
答案就是使用iframe作为内容编辑区域。iframe本身也是一个嵌套页面,它如何能够被编辑呢?
这里有一些关键的属性,它们可以做到让iframe可以被编辑。
<!DOCTYPE HTML>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>KF富文本编辑器</title>
<script src="Scripts/jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function () {
$d = $("#editor")[0].contentWindow.document; // IE、FF都兼容
$d.designMode = "on";
$d.contentEditable = true;
$d.open();
$d.close();
$("body", $d).append("<div>A</div><div>B</div><div>C</div><b>D</b>");
$('#insert_img').click(function () {
// 在iframe中插入一张图片
var img = '<img src="11.jpg" width="200"/>';
$("body", $d).append(img);
});
//设置选定的文本为粗体/正常
$('#btnB').click(function () {
var win = document.getElementById("editor").contentWindow;
win.document.execCommand("Bold", false, null);
win.focus();
});
//
$('#btnYuan').click(function () {
$('#txtYuan').val($('#editor').contents().find('body').html());
});
$('#preview').click(function () {
// 获取iframe的body内容,用于显示或者插入到数据库
//alert($('#editor').contents().find('body').html());
$('#preview_area').html($('#editor').contents().find('body').html());
});
});
</script>
</head>
<body>
源码显示区
<textarea id="txtYuan" style="width: 600px; height: 200px">
</textarea>
<p>
实时编辑区
<iframe id="editor" width="600px" height="200px" style="border: solid 1px;"></iframe>
</p>
<input type="button" id="insert_img" value="插入图片" />
<input type="button" id="preview" value="预览" />
<input type="button" id="btnYuan" value="显示源码" />
<input type="button" id="btnB" value="加粗/正常" />
预览区
<p style="border: 1px dashed #ccc;" id="preview_area"></p>
</body>
</html>
PS:
1、用ifr.contentDocument || ifr.contentWindow.document方式获取iframe的文档对象
2、分别设置designMode属性为’on’,contentEditable属性为’true’让iframe可编辑
3、通过doc.body.innerHTML方法获取内容,这个内容是我们最终要插入到数据库或显示在页面上的(例如用户评论)
4、在doc.write()方法前后加上doc.open(), doc.close()可以防止浏览器不停显示加载中
效果如下图

本文摘自:keepfool博文
