以下代码实现的是在表格中用鼠标拖拽单元格拖拽区域改变2边单元格宽度的功能,,此代码在FIREFOX中正常,但在IE6中如果使用第一行( <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> )以后便不能拖拽,删除此行便又可以,因为脚本要跨多IE版本使用,望高手帮忙找找原因,我找了半天也没看出来哪个JS函数不符合3C标准感激不尽
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="author" content="ShiJundao" />
<meta name="Copyright" content="ShiJundao" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<title>xxxx</title>
<style>
body{
margin:0;
font:normal 12px/150% "宋体",Arial;
color:#000;
}/*Drag Menu*/
.bg {
font-size:12px;
color:#000000;
table-layout:fixed;
}
.dragresizediv{
text-align:center;
width:17px;
height:125px;
margin:0px 0 0px 0;
background:#fff;
border:0px;
float:left;
cursor:e-resize;
}
.closeopenmenu{
text-align:center;
width:17px;
height:35px!important;
height:50px;
margin:0px 0 0px 0;
background:#fff;
border:0px;
float:left;
cursor:hand;
padding-top:15px;
}
</style></head><body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="60"> </td>
</tr>
</table>
<table width="1024" border="1" cellpadding="0" cellspacing="0" bordercolorlight="#7b7b7b" bordercolordark="#efefef" class="bg" id="theObjTable" >
<tr>
<td width="200" height="100%" id="menulist-l"> </td>
<td width="17" height="100%" align="center" valign="middle"><span class="dragresizediv" id="dragarea-a"> </span><span class="closeopenmenu" id="showhidearea"><img src="images/arrowhead_close.gif" name="showhidepic" id="showhidepic" /></span><span class="dragresizediv" id="dragarea-u"> </span></td>
<td height="100%"> </td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25"> </td>
</tr>
</table>
<div id="out"></div>
<script language="javascript" type="text/javascript">
<!--
var $D = document;
function $I(e){return $D.getElementById(e);};
window.onload = function() {
drag($I("dragarea-a"));
drag($I("dragarea-u"));
};
function drag(o,r) {
o.p_p_c_gw = function(index)
{
if (window.ActiveXObject) {
return o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth;
} else {
return parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth) - parseInt(o.parentNode.parentNode.parentNode.parentNode.cellPadding) * 2 - 2;
}
} o.p_p_p_sw = function(index, w)
{
for (var i = 0; i < o.parentNode.parentNode.parentNode.parentNode.rows.length; i++) {
o.parentNode.parentNode.parentNode.parentNode.rows[i].cells[index].style.width = w+"px";
}
}
var out = $I("out");
/* o.firstChild.onmousedown = function(){return false;}; */ o.onmousedown = function(a) {
if (!a) a = window.event;
var lastX = a.clientX;
var watch_dog = o.p_p_c_gw(-1) + o.p_p_c_gw(1); if (o.setCapture) o.setCapture();
else if (window.captureEvents) window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
//
$D.onmousemove = function(a) {
if (!a) a = window.event;
if(o.p_p_c_gw(-1)+o.p_p_c_gw(1)>watch_dog){
o.p_p_p_sw(o.parentNode.cellIndex+1,watch_dog-o.p_p_c_gw(-1));
return;
}
var t = a.clientX - lastX;
out.innerHTML = t;
if (t > 0) { //right
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + 1].style.width) - t < 10) return;
if(parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t > 200){
o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width = "200px";
return;
}
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
} else { //left
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t < 10) return;
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
}
lastX = a.clientX;
};
$D.onmouseup = function() {
if (o.releaseCapture) o.releaseCapture();
else if (window.releaseEvents) window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
$D.onmousemove = null;
$D.onmouseup = null;
};
};
}
function ShowHideMenu(){
if($I("menulist-l").style.display == ""){
$I("menulist-l").style.display = "none";
$I("dragarea-a").style.cursor = "not-allowed";
$I("dragarea-u").style.cursor = "not-allowed";
$I("dragarea-a").onmousedown = function(){return false;};
$I("dragarea-u").onmousedown = function(){return false;};
$I('showhidepic').src = "images/arrowhead_open.gif";
}
else{
$I("menulist-l").style.display = "";
$I("dragarea-a").style.cursor = "e-resize";
$I("dragarea-u").style.cursor = "e-resize";
drag($I("dragarea-a"));
drag($I("dragarea-u"));
$I('showhidepic').src = "images/arrowhead_close.gif";
}
}
$I("showhidearea").ondblclick = ShowHideMenu;
// -->
</script></body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="author" content="ShiJundao" />
<meta name="Copyright" content="ShiJundao" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<title>xxxx</title>
<style>
body{
margin:0;
font:normal 12px/150% "宋体",Arial;
color:#000;
}/*Drag Menu*/
.bg {
font-size:12px;
color:#000000;
table-layout:fixed;
}
.dragresizediv{
text-align:center;
width:17px;
height:125px;
margin:0px 0 0px 0;
background:#fff;
border:0px;
float:left;
cursor:e-resize;
}
.closeopenmenu{
text-align:center;
width:17px;
height:35px!important;
height:50px;
margin:0px 0 0px 0;
background:#fff;
border:0px;
float:left;
cursor:hand;
padding-top:15px;
}
</style></head><body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="60"> </td>
</tr>
</table>
<table width="1024" border="1" cellpadding="0" cellspacing="0" bordercolorlight="#7b7b7b" bordercolordark="#efefef" class="bg" id="theObjTable" >
<tr>
<td width="200" height="100%" id="menulist-l"> </td>
<td width="17" height="100%" align="center" valign="middle"><span class="dragresizediv" id="dragarea-a"> </span><span class="closeopenmenu" id="showhidearea"><img src="images/arrowhead_close.gif" name="showhidepic" id="showhidepic" /></span><span class="dragresizediv" id="dragarea-u"> </span></td>
<td height="100%"> </td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25"> </td>
</tr>
</table>
<div id="out"></div>
<script language="javascript" type="text/javascript">
<!--
var $D = document;
function $I(e){return $D.getElementById(e);};
window.onload = function() {
drag($I("dragarea-a"));
drag($I("dragarea-u"));
};
function drag(o,r) {
o.p_p_c_gw = function(index)
{
if (window.ActiveXObject) {
return o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth;
} else {
return parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth) - parseInt(o.parentNode.parentNode.parentNode.parentNode.cellPadding) * 2 - 2;
}
} o.p_p_p_sw = function(index, w)
{
for (var i = 0; i < o.parentNode.parentNode.parentNode.parentNode.rows.length; i++) {
o.parentNode.parentNode.parentNode.parentNode.rows[i].cells[index].style.width = w+"px";
}
}
var out = $I("out");
/* o.firstChild.onmousedown = function(){return false;}; */ o.onmousedown = function(a) {
if (!a) a = window.event;
var lastX = a.clientX;
var watch_dog = o.p_p_c_gw(-1) + o.p_p_c_gw(1); if (o.setCapture) o.setCapture();
else if (window.captureEvents) window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
//
$D.onmousemove = function(a) {
if (!a) a = window.event;
if(o.p_p_c_gw(-1)+o.p_p_c_gw(1)>watch_dog){
o.p_p_p_sw(o.parentNode.cellIndex+1,watch_dog-o.p_p_c_gw(-1));
return;
}
var t = a.clientX - lastX;
out.innerHTML = t;
if (t > 0) { //right
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + 1].style.width) - t < 10) return;
if(parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t > 200){
o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width = "200px";
return;
}
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
} else { //left
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t < 10) return;
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
}
lastX = a.clientX;
};
$D.onmouseup = function() {
if (o.releaseCapture) o.releaseCapture();
else if (window.releaseEvents) window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
$D.onmousemove = null;
$D.onmouseup = null;
};
};
}
function ShowHideMenu(){
if($I("menulist-l").style.display == ""){
$I("menulist-l").style.display = "none";
$I("dragarea-a").style.cursor = "not-allowed";
$I("dragarea-u").style.cursor = "not-allowed";
$I("dragarea-a").onmousedown = function(){return false;};
$I("dragarea-u").onmousedown = function(){return false;};
$I('showhidepic').src = "images/arrowhead_open.gif";
}
else{
$I("menulist-l").style.display = "";
$I("dragarea-a").style.cursor = "e-resize";
$I("dragarea-u").style.cursor = "e-resize";
drag($I("dragarea-a"));
drag($I("dragarea-u"));
$I('showhidepic').src = "images/arrowhead_close.gif";
}
}
$I("showhidearea").ondblclick = ShowHideMenu;
// -->
</script></body>
</html>
to
cursor:pointer;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>xxxx</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="author" content="ShiJundao" />
<meta name="Copyright" content="ShiJundao" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<style type="text/css">
body{margin:0;font:normal 12px/1.5 Arial;color:#000;}
table,tr,td{border-collapse:collapse;border:1px solid #ccc;}
/*Drag Menu*/
.bg{color:#000;width:99%;margin:60px auto 35px auto;}
.dragresizediv,.closeopenmenu{text-align:center;width:17px;margin:0;background:#fff;border:0;float:left;}
.dragresizediv{height:125px;cursor:e-resize;}
.closeopenmenu{height:35px;cursor:pointer;padding-top:15px;}
</style>
<script language="javascript" type="text/javascript">
var $D = document;
function $I(e){return $D.getElementById(e);};
window.onload = function(){
drag($I("dragarea-a"));
drag($I("dragarea-u"));
};
function drag(o){
o.p_p_c_gw = function(index){
if (window.ActiveXObject){
return o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth;
} else {
return parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth) - 1;
}
}
o.p_p_p_sw = function(index, w){
for (var i = 0; i < o.parentNode.parentNode.parentNode.parentNode.rows.length; i++){
o.parentNode.parentNode.parentNode.parentNode.rows[i].cells[index].style.width = w + "px";
}
}
var out = $I("out");
/* o.firstChild.onmousedown = function(){return false;}; */
o.onmousedown = function(a) {
if (!a) a = window.event;
var lastX = a.clientX;
var watch_dog = o.p_p_c_gw(-1) + o.p_p_c_gw(1);
if (o.setCapture) o.setCapture();
else if (window.captureEvents) window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
$D.onmousemove = function(a){
if (!a) a = window.event;
if(o.p_p_c_gw(-1)+o.p_p_c_gw(1)>watch_dog){
o.p_p_p_sw(o.parentNode.cellIndex+1,watch_dog-o.p_p_c_gw(-1));
return;
}
var t = a.clientX - lastX;
out.innerHTML = t;
if (t > 0) { //right
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + 1].style.width) - t < 10) return;
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t > 200){
o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width = "200px";
return;
}
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
}else{ //left
if (parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex - 1].style.width) + t < 10) return;
o.p_p_p_sw(o.parentNode.cellIndex - 1, o.p_p_c_gw(-1) + t);
o.p_p_p_sw(o.parentNode.cellIndex + 1, o.p_p_c_gw(1) - t);
}
lastX = a.clientX;
};
$D.onmouseup = function(){
if (o.releaseCapture) o.releaseCapture();
else if (window.releaseEvents) window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
$D.onmousemove = null;
$D.onmouseup = null;
};
};
}function ShowHideMenu(){
if($I("menulist-l").style.display == ""){
$I("menulist-l").style.display = "none";
$I("dragarea-a").style.cursor = "not-allowed";
$I("dragarea-u").style.cursor = "not-allowed";
$I("dragarea-a").onmousedown = function(){return false;};
$I("dragarea-u").onmousedown = function(){return false;};
//$I('showhidepic').src = "arrowhead_open.gif";
}else{
$I("menulist-l").style.display = "";
$I("dragarea-a").style.cursor = "e-resize";
$I("dragarea-u").style.cursor = "e-resize";
drag($I("dragarea-a"));
drag($I("dragarea-u"));
//$I('showhidepic').src = "arrowhead_close.gif";
}
}
</script>
</head>
<body>
<table cellpadding="0" class="bg" id="theObjTable">
<tr>
<td width="200" height="100%" id="menulist-l">左</td>
<td width="17" height="100%" valign="middle">
<span class="dragresizediv" id="dragarea-a"> </span>
<span class="closeopenmenu" ondblclick="ShowHideMenu();">中</span>
<span class="dragresizediv" id="dragarea-u"> </span>
</td>
<td height="100%">右</td>
</tr>
</table>
<div id="out"></div>
</body>
</html>
table,tr,td{border-collapse:collapse;border:1px solid #ccc;}
的确有效, 表格边框合并以后就没这问题了
function drag(o){
o.p_p_c_gw = function(index){
if (window.ActiveXObject){
return o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth;
} else {
return parseInt(o.parentNode.parentNode.cells[o.parentNode.cellIndex + index].offsetWidth) - 1;
}
看来是W3C标准使得在IE下 用原来的JS代码获取的表格单元格列宽不正确导致,受益匪浅,感谢 mc008 大力相助! 祝 mc008 兄 天福永享,寿比天齐~