利用 ContentEditable 做 WYSIWYG 编辑器
Sunday, 27. April 2008, 12:50:30
后来发现除了 Firefox 的其他浏览器,几乎都支持 div 的 ContentEditable="true" 属性,而 Firefox 3 也将支持该属性,所以决定用 div 做编辑器。刚开始觉得不难,然而一开始做就遇到不少难点,最主要是:
- 输入焦点的控制
- 光标位置的控制
- 选取区域的控制
这几个问题不解决,很难做出令人满意的编辑器。因此,正在努力解决以上问题。
无不用其“极”
Sunday, 27. April 2008, 12:50:30
Monday, 4. June 2007, 02:41:20
<html>
<head>
<title>Move table row up/down test</title>
<script language="javascript">
//*********************************
// Get current row's index by name
//*********************************
function getRowIndex(strName)
{
var table = document.getElementById('targettable');
var rows = table.getElementsByTagName('tr');
arrNameIndex = new Array()
for (var i=0; i<rows.length; i++) {
if(strName == rows[i].getAttribute('id')) {
return i;
}
}
}
//*********************************
// Move row up
//*********************************
function moveRowUp(rowIndex)
{
if(rowIndex == 0) {
return;
}
var table = document.getElementById('targettable');
var rows = table.getElementsByTagName('tr');
tr = rows[rowIndex];
pos = rows[rowIndex-1];
pos.parentNode.insertBefore(tr, pos);
}
//*********************************
// Move row down
//*********************************
function moveRowDown(rowIndex)
{
var table = document.getElementById('targettable');
var rows = table.getElementsByTagName('tr');
if(rowIndex >= rows.length) {
return;
}
tr = rows[rowIndex+1];
pos = rows[rowIndex];
pos.parentNode.insertBefore(tr, pos);
}
</script
</head>
<body>
<table id="targettable">
<tr valign="top" id="row1">
<td>This is :</td>
<td>Line1</td>
<td>
<input type="button" name="moveup" onclick="moveRowUp(getRowIndex('row1'));" value="↑" />
<input type="button" name="movedown" onclick="moveRowDown(getRowIndex('row1'));" value="↓" />
</td>
</tr>
<tr valign="top" id="row2">
<td>This is :</td>
<td>Line2</td>
<td>
<input type="button" name="moveup" onclick="moveRowUp(getRowIndex('row2'));" value="↑" />
<input type="button" name="movedown" onclick="moveRowDown(getRowIndex('row2'));" value="↓" />
</td>
</tr>
<tr valign="top" id="row3">
<td>This is :</td>
<td>Line3</td>
<td>
<input type="button" name="moveup" onclick="moveRowUp(getRowIndex('row3'));" value="↑" />
<input type="button" name="movedown" onclick="moveRowDown(getRowIndex('row3'));" value="↓" />
</td>
</tr>
</table>
</body>
</html>
<html>
<head>
<title>shift row of table sample</title>
<script language="javascript">
<!--
var MIN_ROW_ID = 0;
var MAX_ROW_ID = 5;
var MIN_COL_ID = 2;
var MAX_COL_ID = 4;
var flgOrderChanged = false;
//*********************************
// Move Up
//*********************************
function moveRowUp(rowId)
{
if(rowId <= MIN_ROW_ID) {
return;
}
var strPrefix = 'R' + rowId + 'C';
var strUpPrefix = 'R' + (rowId - 1) + 'C';
for(var colId = MIN_COL_ID; colId <= MAX_COL_ID; colId++) {
var strDivId = strPrefix + colId;
var strUpDivId = strUpPrefix + colId;
var objDiv = document.getElementById(strDivId);
var objUpDiv = document.getElementById(strUpDivId);
var tmpHTML = objDiv.innerHTML;
objDiv.innerHTML = objUpDiv.innerHTML;
objUpDiv.innerHTML = tmpHTML;
}
flgOrderChanged = true;
}
//*********************************
// Move Down
//*********************************
function moveRowDown(rowId)
{
if(rowId >= MAX_ROW_ID) {
return;
}
var strPrefix = 'R' + rowId + 'C';
var strDownPrefix = 'R' + (rowId + 1) + 'C';
for(var colId = MIN_COL_ID; colId <= MAX_COL_ID; colId++) {
var strDivId = strPrefix + colId;
var strDownDivId = strDownPrefix + colId;
var objDiv = document.getElementById(strDivId);
var objDownDiv = document.getElementById(strDownDivId);
var tmpHTML = objDiv.innerHTML;
objDiv.innerHTML = objDownDiv.innerHTML;
objDownDiv.innerHTML = tmpHTML;
}
flgOrderChanged = true;
}
-->
</script
</head>
<body>
<table border="1" width="60%" align="center" cellspacing="0" bgcolor="">
<tr bgcolor="#E6E6FA">
<td height="1" align="center" colspan="2">Order</td>
<td height="1" align="center" width="30%">Column1</td>
<td height="1" align="center" width="30%">Column2</td>
<td height="1" align="center">Oprations</td>
</tr>
<tr>
<td height="1" align="left">
<div id="R0C0" align="center">
<a href="javascript:moveRowDown(0);">Down</a>
</div>
</td>
<td height="1" align="center">
<div id="R0C1" align="center">1</div>
</td>
<td height="1" align="left">
<div id="R0C2" align="left">Row 1 Colum 1</div>
</td>
<td height="1" align="left">
<div id="R0C3" align="left">Row 1 Colum 2</div>
</td>
<td height="1" align="left">
<div id="R0C4" align="left"><a href="#edit">Edit(1)</a></div>
</td>
</tr>
<tr>
<td height="1" align="left">
<div id="R1C0" align="center">
<a href="javascript:moveRowDown(1);">Down</a>
<a href="javascript:moveRowUp(1);">Up</a>
</div>
</td>
<td height="1" align="center">
<div id="R1C1" align="center">2</div>
</td>
<td height="1" align="left">
<div id="R1C2" align="left">Row 2 Colum 1</div>
</td>
<td height="1" align="left">
<div id="R1C3" align="left">Row 2 Colum 2</div>
</td>
<td height="1" align="left">
<div id="R1C4" align="left"><a href="#edit">Edit(2)</a></div>
</td>
</tr>
<tr>
<tr>
<td height="1" align="left">
<div id="R2C0" align="center">
<a href="javascript:moveRowDown(2);">Down</a>
<a href="javascript:moveRowUp(2);">Up</a>
</div>
</td>
<td height="1" align="center">
<div id="R2C1" align="center">3</div>
</td>
<td height="1" align="left">
<div id="R2C2" align="left">Row 3 Colum 1</div>
</td>
<td height="1" align="left">
<div id="R2C3" align="left">Row 3 Colum 2</div>
</td>
<td height="1" align="left">
<div id="R2C4" align="left"><a href="#edit">Edit(3)</a></div>
</td>
</tr>
<tr>
<tr>
<td height="1" align="left">
<div id="R3C0" align="center">
<a href="javascript:moveRowUp(2);">Up</a>
</div>
</td>
<td height="1" align="center">
<div id="R3C1" align="center">4</div>
</td>
<td height="1" align="left">
<div id="R3C2" align="left">Row 4 Colum 1</div>
</td>
<td height="1" align="left">
<div id="R3C3" align="left">Row 4 Colum 2</div>
</td>
<td height="1" align="left">
<div id="R3C4" align="left"><a href="#edit">Edit(4)</a></div>
</td>
</tr>
</table>
</body>
</html>
Thursday, 8. June 2006, 08:36:50
Wednesday, 7. June 2006, 10:56:30
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
LinuxSir
Linux中坚站
为Linux工程师提供技术动力
打造中国最大的UNIX/LINIX资讯站
My mirror, my window, the bridge connecting you and I.
关注:php,mysql,ajax ,linux, js,开源
有用的Opera菜单
なにもあたらしくない
By Adam Li
By Satoru Watanabe
by singway
by 摸鱼儿
by Somh
by 法师
by yumumao
Maybe I was a Bird in another Life !
投放广告挣美元,可用PayPal接收付款
免费网页模板
数据表格样式收集