本文实例讲述了JS拖动选择table里的单元格。分享给大家供大家参考,具体如下:

用JS 实现类似Excel里面动态选择单元格的例子,从网上得到的例子,先记录在这里,以后参考用。

www.jb51.net JS拖动选择table里的单元格

.table-container {

width: 100%;

overflow-y: auto;

_overflow: auto;

margin: 0 0 1em;

background-color:white;

}

table {

border: 0;

border-collapse: collapse;

}

table td, table th {

border: 1px solid #999;

padding: .5em 1em;

}

/*添加IOS下滚动条 */

.table-container::-webkit-scrollbar {

-webkit-appearance: none;

width: 14px;

height: 14px;

}

.table-container::-webkit-scrollbar-thumb {

border-radius: 8px;

border: 3px solid #fff;

background-color: rgba(0, 0, 0, .3);

}

/*对齐*/

.table-time div {

text-align: center;

min-width: 104px;

}

.table-time, tr th {

background-color: #DBE5F1;

}

.table-time {

cursor: default !important;

}

.div-right {

text-align: right;

}

.div-unSelect {

background-color: #D8D8D8;

}

.div-Select {

background-color: #92D050;

}

.div-ISelect {

background-color: #FBD4B4;

}

/*图例*/

ul li {

list-style: none;

float: left;

}

.table-container td {

cursor: pointer;

}

$(function () {

initForm();

var monday = moment().startOf('isoWeek');

$("#txtMonday").val(monday.format("YYYY-MM-DD"));

renderWeek(monday);

})

function initForm() {

//初始化行

var duration = ["9:30~10:15", "10:30~11:15", "11:30~12:15", "13:30~14:15", "14:30~15:15", "15:30~16:15"];

$("tr td").parent().remove();

//TODO:从后台获得结果

for (var i = 0; i < duration.length; i++) {

var tempRow = "

"

+ "

"

+ "

" + (i + 1) + "

"

+ "

" + duration[i] + "

"

+ "

"

+ "

" + "

已约:1人

" + ""

+ "

" + "

已约:0人
?

" + ""

+ "

" + "

已约:1人
?

" + ""

+ "

" + "

已约:0人
?

" + ""

+ "

" + "

已约:0人
?

"

+ "

"

+ "

" + "

已约:0人
?

"

+ "

"

+ "

" + "

已约:0人
?

"

+ "

"

+ "

";

$("table tbody").append(tempRow);

}

var isMouseDown = false,

isHighlighted,

tickets = [];

//添加点击事件

$(".select").mousedown(function () {

isMouseDown = true;

var currentTD = $(this);

if (currentTD.hasClass("div-unSelect")) {

//alert("该时间段已关闭禁止选择");

return;

}

if (currentTD.hasClass("table-time")) {

//alert("这是时间段禁止选择");

return;

}

var countDiv = $(currentTD.children()[0]);

var correctDiv = $(currentTD.children()[1]);

var count = 0;

if (currentTD.hasClass("div-ISelect")) {

currentTD.removeClass("div-ISelect");

count = Number(countDiv.attr("count")) - 1;

correctDiv.html("?");

} else {

currentTD.addClass("div-ISelect");

count = Number(countDiv.attr("count")) + 1;

correctDiv.html("√");

}

countDiv.attr("count", count);

countDiv.html("已约:" + countDiv.attr("count") + "人");

isHighlighted = $(this).hasClass("div-ISelect");

selected();

return false; // prevent text selection

})

.mouseover(function (e) {

if (checkHover(e, this)) {

if (isMouseDown) {

var currentTD = $(this);

if (currentTD.hasClass("div-unSelect")) {

//alert("该时间段已关闭禁止选择");

return;

}

if (currentTD.hasClass("table-time")) {

//alert("这是时间段禁止选择");

return;

}

var countDiv = $(currentTD.children()[0]);

var correctDiv = $(currentTD.children()[1]);

var count = 0;

if (currentTD.hasClass("div-ISelect")) {

currentTD.removeClass("div-ISelect");

count = Number(countDiv.attr("count")) - 1;

correctDiv.html("?");

} else {

currentTD.addClass("div-ISelect");

count = Number(countDiv.attr("count")) + 1;

correctDiv.html("√");

}

countDiv.attr("count", count);

countDiv.html("已约:" + countDiv.attr("count") + "人");

selected();

}

}

});

$(document)

.mouseup(function () {

isMouseDown = false;

//alert('Deselected');

});

}

function selected() {

//tickets = $("div-ISelect").map(function () {

// return $(this).text();

//});

//console.log(tickets.get().join());

}

//初始化日期

function renderWeek(monday) {

$("#txtMonday").val(monday.format("YYYY-MM-DD"));

获得这一周的所有日期

var myArray = new Array()

myArray[0] = monday.format("MM-DD");

for (var i = 1; i < 7; i++) {

var temp = moment(myArray[i - 1]).add(1, "days").format("MM-DD");

myArray[i] = temp;

}

$("tr th:gt(0)").each(function (i) {

var weekString = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];

$(this).html("" + weekString[i] + " " + myArray[i] + "");

});

$("caption").html(monday.format("YYYY-MM-DD") + "~" + monday.add(6, 'days').format("YYYY-MM-DD"));

}

//上一周

function lastWeek() {

initForm();

var currentDay = moment($("#txtMonday").val());

var lastMonday = currentDay.add(-1, 'weeks').startOf('isoWeek');//上周一

renderWeek(lastMonday);

}

//下一周

function nextWeek() {

initForm();

var currentDay = moment($("#txtMonday").val());

var nextMonday = currentDay.add(1, 'weeks').startOf('isoWeek');//上周一

renderWeek(nextMonday);

}

//全选

function selectAll() {

$("tr td").each(function () {

var currentTD = $(this);

if (currentTD.hasClass("div-ISelect") || currentTD.hasClass("div-unSelect") || currentTD.hasClass("table-time")) {

return;

}

var countDiv = $(currentTD.children()[0]);

var correctDiv = $(currentTD.children()[1]);

var count = 0;

currentTD.addClass("div-ISelect");

count = Number(countDiv.attr("count")) + 1;

correctDiv.html("√");

countDiv.attr("count", count);

countDiv.html("已约:" + countDiv.attr("count") + "人");

});

}

//判断是否重复mouseover

function checkHover(e, target) {

if (getEvent(e).type == "mouseover") {

return !contains(target, getEvent(e).relatedTarget || getEvent(e).fromElement) && !((getEvent(e).relatedTarget || getEvent(e).fromElement) === target);

} else {

return !contains(target, getEvent(e).relatedTarget || getEvent(e).toElement) && !((getEvent(e).relatedTarget || getEvent(e).toElement) === target);

}

} function getEvent(e) {

return e || window.event;

}

function contains(parentNode, childNode) {

if (parentNode.contains) {

return parentNode != childNode && parentNode.contains(childNode);

} else {

return !!(parentNode.compareDocumentPosition(childNode) & 16);

}

}

我是表格标题
周一 周二 周三 周四 周五 周六 周日
  • □表示已有教练预约
  • □表示当前已预约,同时以“√”表示
  • □表示可预约
  • □表示未开放

运行效果:

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家jQuery程序设计有所帮助。

html 拖拽选择表格,JS拖动选择table里的单元格完整实例【基于jQuery】相关推荐

  1. CSS设置表格行列,给bootstrap table设置行列单元格样式

    1.根据单元格或者行内其他单元格的内容,给该单元格设置一定的css样式 columns: [{ field: 'index', title: '序号', align:"center" ...

  2. 利用HTML5新特性实现拖拽交换表格单元格元素

    利用HTML5新特性实现拖拽交换表格单元格元素 HTML5新特性:拖放 拖放 拖放(Drag 和 Drop)是很常见的特性.它指的是您抓取某物并拖入不同的位置. 拖放是 HTML5 标准的组成部分:任 ...

  3. Qt可拖拽排序表格(解决滚动条不兼容问题,类似QQ好友分组排序)

    原版链接 https://blog.csdn.net/dpsying/article/details/77206127 Qt可拖拽排序表格(类似QQ好友分组排序) 感谢博主无私分享 修改后,解决了滚动 ...

  4. html列表拖拽排序插件,js拖拽排序插件Sortable

    插件描述:功能强大的Javript拖拽排序库Sortable,拖拽兼容性好,零依赖 更新时间:2020-05-15 18:19:16 SortableJS 功能强大的JavaScript 拖拽库 特性 ...

  5. js 拖拽生成html,js拖拽插件 js 拖拽控件生成自定义表单 怎么实现

    想请教一个js的问题,拖拽控件 js 拖拽控件生成自定义表单 怎么实现 说说步骤吧 监听mousedown事件 - 获取鼠标点击元素,判断是否可拖拽 - 设置flag做标记 - 建一个tempDOM, ...

  6. js如何实现动态显示表格数据(点奇数显示奇数单元格内容)

    js如何实现动态显示表格数据(点奇数显示奇数单元格内容) 一.总结 一句话总结: 1.动态指定表格中每个单元格的id,然后通过id可以获取每个单元格,然后对里面的innerHTML进行赋值. 2.弄了 ...

  7. 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总

    在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总 目录 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌 ...

  8. Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)

    (本文代码已升级至Swift3) 本文演示如何制作一个可以编辑单元格内容的表格(UITableView). 1,效果图 (1)默认状态下,表格不可编辑,当点击单元格的时候会弹出提示框显示选中的内容. ...

  9. 一个实用的表格(锁定表头,可调整单元格大小,可排序)

    昨天在网上找到一个不错的表格显示,该表格可以锁定表头,可调整单元格的大小,同时还可以对数据进行排序,显示效果如下: 原代码: <!DOCTYPE HTML PUBLIC "-//W3C ...

最新文章

  1. mysql8.11安装_MySQL-mysql 8.0.11安装教程
  2. js如何获取文本节点的值?
  3. 圆环自带动画进度条ColorfulRingProgressView
  4. Why is processing a sorted array faster than an unsorted array?
  5. 电气技术应用和计算机应用,电气技术应用专业介绍-1.ppt
  6. 多线程---ReentrantLock
  7. [SPM_hw1]记一次项目经历
  8. FIR滤波器之Hilbert变换
  9. 控制网平差(C++实现)
  10. 计算机病毒入侵方法,预防电脑病毒入侵的方法
  11. html设计效果图,网页效果图如何制作?
  12. 针式打印机打印显示传真服务器,针式打印机三联纸怎么设置 点击上面的工具栏上的打印服务...
  13. 程序员杂谈:你还有梦想吗?
  14. 学习笔记——Python输入与输出
  15. MYSQL (关系型数据库管理系统)的基础知识详解
  16. GitHub开源:支持100多种语言的OCR文字识别
  17. 虚拟机玩转 Veritas NetBackup(NBU)之服务端安装部署
  18. 使用Cython提高python代码执行速度
  19. 微信小程序二手跳蚤市场系统设计毕业设计论文
  20. 尚硅谷2020微服务分布式电商项目《谷粒商城》-商品搜索

热门文章

  1. LeerCode 题 - 14. 最长公共前缀
  2. 取出客户端卸载CKEditor中的内容,放入数据库中的方案
  3. python中Numpy中的替代值
  4. Knn原理及Python实现、数据展示
  5. 机器学习:支持向量机SVM和人工神经网络ANN的比较
  6. 用Java写数据到POST请求
  7. Unity Text 插入超链接
  8. Unity 4 3 制作一个2D横版射击游戏
  9. 天池-新闻推荐-数据分析
  10. 210 - Concurrency Simulator