<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<style type="text/css">
html, body {
TEXT-ALIGN: center;
height: 100%;
overflow: hidden;
} body, div, ul, li {
margin: 0;
padding: 0;
} body {
font: 12px/1.5 \5fae\8f6f\96c5\9ed1;
} ul {
list-style-type: none;
} #menuDiv {
position: absolute;
top: -9999px;
left: -9999px;
} #menuDiv ul {
float: left;
border: 1px solid #979797;
background: url(img/line.png) 24px 0 repeat-y #f1f1f1;
padding: 2px;
box-shadow: 2px 2px 2px rgba(0,0,0,.6);
} #menuDiv ul li {
float: left;
clear: both;
height: 24px;
cursor: pointer;
line-height: 24px;
white-space: nowrap;
padding: 0 30px;
} #menuDiv ul li.sub {
background-repeat: no-repeat;
background-position: right 7px;
background-image: url(img/arrow.png);
} #menuDiv ul li.active {
background-color: #f1f3f6;
border-radius: 3px;
border: 1px solid #aecff7;
height: 22px;
line-height: 22px;
background-position: right -9px;
padding: 0 30px;
} #menuDiv ul ul {
display: none;
position: absolute;
}
</style>
</head>
<body>
<script src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
var getOffset = {
top: function (obj) {
return obj.offsetTop + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0)
},
left: function (obj) {
return obj.offsetLeft + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0)
}
};
var tdName;
var tdHtml;
window.onload = function () {
var oMenu = document.getElementById("menuDiv");
var aUl = oMenu.getElementsByTagName("ul");
var aLi = oMenu.getElementsByTagName("li");
var showTimer = hideTimer = null;
var i = 0;
var maxWidth = maxHeight = 0;
var aDoc = [document.documentElement.offsetWidth, document.documentElement.offsetHeight];
oMenu.style.display = "none";
for (i = 0; i < aLi.length; i++) {
//为含有子菜单的li加上箭头
aLi[i].getElementsByTagName("ul")[0] && (aLi[i].className = "sub");
//鼠标移入
aLi[i].onmouseover = function () {
var oThis = this;
var oUl = oThis.getElementsByTagName("ul");
//鼠标移入样式
oThis.className += " active";
//显示子菜单
if (oUl[0]) {
clearTimeout(hideTimer);
showTimer = setTimeout(function () {
for (i = 0; i < oThis.parentNode.children.length; i++) {
oThis.parentNode.children[i].getElementsByTagName("ul")[0] &&
(oThis.parentNode.children[i].getElementsByTagName("ul")[0].style.display = "none");
}
oUl[0].style.display = "block";
oUl[0].style.top = oThis.offsetTop + "px";
oUl[0].style.left = oThis.offsetWidth + "px";
setWidth(oUl[0]);
//最大显示范围
maxWidth = aDoc[0] - oUl[0].offsetWidth;
maxHeight = aDoc[1] - oUl[0].offsetHeight;
//防止溢出
maxWidth < getOffset.left(oUl[0]) && (oUl[0].style.left = -oUl[0].clientWidth + "px");
maxHeight < getOffset.top(oUl[0]) && (oUl[0].style.top = -oUl[0].clientHeight + oThis.offsetTop + oThis.clientHeight + "px")
}, 300);
}
};
//鼠标移出 aLi[i].onmouseout = function () {
var oThis = this;
var oUl = oThis.getElementsByTagName("ul");
//鼠标移出样式
oThis.className = oThis.className.replace(/\s?active/, "");
clearTimeout(showTimer);
hideTimer = setTimeout(function () {
for (i = 0; i < oThis.parentNode.children.length; i++) {
oThis.parentNode.children[i].getElementsByTagName("ul")[0] &&
(oThis.parentNode.children[i].getElementsByTagName("ul")[0].style.display = "none");
}
}, 300);
};
}
//自定义右键菜单
document.getElementById("menuMain").oncontextmenu = function (event) {
var event = event || window.event;
oMenu.style.display = "block";
oMenu.style.top = event.clientY + "px";
oMenu.style.left = event.clientX + "px";
setWidth(aUl[0]);
//最大显示范围
maxWidth = aDoc[0] - oMenu.offsetWidth;
maxHeight = aDoc[1] - oMenu.offsetHeight;
//防止菜单溢出
oMenu.offsetTop > maxHeight && (oMenu.style.top = maxHeight + "px");
oMenu.offsetLeft > maxWidth && (oMenu.style.left = maxWidth + "px");
return false;
}; //取li中最大的宽度, 并赋给同级所有li
function setWidth(obj) {
maxWidth = 0;
for (i = 0; i < obj.children.length; i++) {
var oLi = obj.children[i];
var iWidth = oLi.clientWidth - parseInt(oLi.currentStyle ? oLi.currentStyle["paddingLeft"] : getComputedStyle(oLi, null)["paddingLeft"]) * 2
if (iWidth > maxWidth) maxWidth = iWidth;
}
for (i = 0; i < obj.children.length; i++) obj.children[i].style.width = maxWidth + "px";
} //单击该单元格取得该Td值
var td = $("#menuMain").find("td");
td.each(function (i) {
td[i].onmousedown = function () {
//event.button == //1为左键,2为右键,4为中键,0为没有按键动作,3为屏蔽右键
oMenu.style.display = "none"
if (event.button == 2) {
event.returnValue = false;
tdName = $(this).html();
$(this).attr("real-value", tdName);
tdHtml = $(this);
}
};
}); //双击td改变值
$("#menuMain").find("td").dblclick(function () {
var objHtml= $(this);
var oldText = $.trim(objHtml.html());
var input = $("<input type='text' id='txtId' value='" + oldText + "'>");
$(this).html(input);
//var ctr = document.getElementById("txtId").createTextRange();
//ctr.collapse(false);//将插入点移动到当前范围的开始或结尾。
//ctr.select(); //编辑td屏蔽右键菜单
input.contextmenu(function () {
return false;
});
input.trigger("focus").trigger("select"); //失去焦点时
input.blur(function () {
var newText = $(this).val();
var input_blur = $(this);
//if (oldText != newText) {
//}
objHtml.html(newText);
}); //判断键盘的某健相对应的事件
input.keydown(function (event) {
var keyValue = event.keyCode;
var input_keydown = $(this); switch (keyValue) {
case 13: // 按下回车键
var newValue = input_keydown.val();
objHtml.html(newValue);
break;
case 27: // 按下Esc键
objHtml.html(oldText);
break;
}
}); });
}; //右击选择该单元格
function rightClickCell(itemValue) {
tdName = itemValue + "," + tdName;
$(tdHtml).html(tdName);
selectArow(tdHtml);
} //右击选择该列为
function rightClickColumns(itemValue) {
var thisTdIndex = $(tdHtml).index();
var thisTrIndex = $(tdHtml).parent().index();
$("#menuMain").find("tr").each(function () {
var allTrIndex = $(this).index();
if (allTrIndex >= thisTrIndex) {
var tdObj = $(this).find("td").eq(thisTdIndex);
var thisTdHtml = $(this).find("td").eq(thisTdIndex).html();
thisTdHtml = itemValue + "," + thisTdHtml;
tdObj.html(thisTdHtml);
selectArow(tdObj);
}
}); } //原来的节点,假设原来的背景颜色为白色,点击变为#e6f0fc
function selectArow(sObject) {
var pre;
$(sObject).attr("style", "BACKGROUND-COLOR: #e6f0fc");
if (pre != null && pre != sObject) $(pre).attr("style", "BACKGROUND-COLOR: white");
pre = sObject;
} </script> <form id="menuForm">
<input type="hidden" id="tableId" value="" />
<table border="1" id="menuMain">
<tr>
<td real-value="">AAAA</td>
<td real-value="">BBBB</td>
<td real-value="">CCCC</td>
<td>DDDD</td>
</tr>
<tr>
<td>EEEE</td>
<td>FFFF</td>
<td>GGGG</td>
<td>HHHH</td>
</tr>
<tr>
<td>IIII</td>
<td>JJJJ</td>
<td>KKKK</td>
<td>LLLL</td>
</tr>
<tr>
<td>MMMM</td>
<td>NNNN</td>
<td>OOOO</td>
<td>PPPP</td>
</tr>
</table>
</form>
<div id="menuDiv">
<input type="hidden" id="idObj" value="" />
<ul>
<li>该单元格为
<ul>
<li onclick="rightClickCell('起运港')">起运港</li>
<li onclick="rightClickCell('目的港')">目的港</li>
<li onclick="rightClickCell('船公司')">船公司</li>
<li onclick="rightClickCell('起始日期')">起始日期</li>
</ul>
</li>
<li>该列为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<ul>
<li onclick="rightClickColumns('起运港')">起运港</li>
<li onclick="rightClickColumns('目的港')">目的港</li>
<li>运价
<ul>
<li>---</li>
<li>---</li>
<li>---</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</body> </html>

DownLoad Demo File

鼠标右键Table的td弹出多级菜单,双击td编辑的更多相关文章

  1. Android之弹出多级菜单

    使用布局文件创建菜单:(多级菜单) 在res下创建目录menu(假设已经有啦就不用再创建了) 在该menu目录下创建XML文件这里我把文件名称命名为menu 在创建的menu.XML文件里 写入: & ...

  2. WPF 之 左键弹出操作菜单,并禁用右键菜单

    在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...

  3. 原生js日期时间插件鼠标点击文本框弹出日期时间表格选择日期时间

    原文出处 (这是我从互联网上搜来的,感觉能满足各方面的需求.个人感觉挺不错的,所以后期修改了一下向大家推荐!) 效果图: html代码: <!DOCTYPE html PUBLIC " ...

  4. EditorGUILayout.EnumPopup 枚举弹出选择菜单

    http://www.unity蛮牛.com/thread-25490-1-1.html http://www.unity蛮牛.com/m/Script/EditorGUILayout.EnumPop ...

  5. 转:jQuery弹出二级菜单

    <html> <head> <meta http-equiv="content-type" content="text/html; char ...

  6. WPF:设置弹出子菜单的是否可用状态及效果

    需求: 设置弹出子菜单(二级)项仅首项可用,其他项均不可用:不可用是呈灰色效果. 注: 菜单项都是依据层级数据模板.具体格式如下: StackBlock{TextBlock{Image}.TextBl ...

  7. ListView的使用(二)长按弹出上下文菜单

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView ...

  8. 微信小程序弹出操作菜单

    微信小程序弹出操作菜单 比如在页面上放一个按钮,点击按钮弹出操作菜单,那么在按钮的 bindtap 事件里,执行下面的代码即可: wx.showActionSheet({ itemList: ['A' ...

  9. Flutter - 弹出底部菜单Show Modal Bottom Sheet

    在很多安卓App上,有很多底部弹出的菜单,这个在Flutter上同样可以实现. 先看一下效果 嗯,就是这样子的,当用户点击菜单区域以外的时候,菜单会自动关闭. 下面就看一下Dart语言实现 float ...

随机推荐

  1. SQLSERVER 维护计划无法删除

    数据对网站运营或者企业运营是至关重要的,所以,我们在使用数据库的时候,为了保证数据的安全可靠性,都会做数据库备份,很显然,这个备份,我们不可能每天都去手动备份,SQLServer 数据库就可以提供数据 ...

  2. python的if not用法

    python里的if not的用法: None,False,0,空列表[],空字典{},空元祖(),都相当于false print('not x 打印出来的结果',not x) x =[1] prin ...

  3. bzoj 4196 [Noi2015]软件包管理器 (树链剖分+线段树)

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2852  Solved: 1668[Submit][Sta ...

  4. SA / SAM 题目集

    上一次做 SA / SAM 相关的题还要数到某场毒瘤 NOIP 模拟赛--这么久没做了都快忘光了--写点东西记录一些最近做到的水好题. LOJ2059 「TJOI / HEOI2016」字符串 题意 ...

  5. Hdoj 1875.畅通工程再续 题解

    Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...

  6. 【CF1139D】Steps to One(动态规划)

    [CF1139D]Steps to One(动态规划) 题面 CF 你有一个数组,每次随机加入一个\([1,n]\)的数,当所有数\(gcd\)为\(1\)时停止,求数组长度的期望. 题解 设\(f[ ...

  7. 新建WINDOWS服务C#

    当前作业环境 Windows8.1 | Visual Studio 2013 一. 建立项目,选择"Windows服务"模板 二. 查看生成的项目,结构很像WinForm的项目,其 ...

  8. Linux系统状态监控小工具 - Linux Dash

    Linux Dash是一个简单易用的Linux系统状态监控工具,项目地址:https://github.com/afaqurk/linux-dash 1.安装Apache服务: [root@local ...

  9. Arch Linux下韩文重叠显示

    解决方法 sudo pacman -S wqy-microhei-kr-patched

  10. tyvj/joyoi 2018 小猫爬山

    2018,这个题号吼哇! 搜索第一题,巨水. WA了一次,因为忘了还原... #include <cstdio> ; int n, W, ans, weigh[N], cost[N]; i ...