前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

以showExcel为例学html(html executable)

1. HTML 基础结构

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生信息管理系统</title>
</head>
<body>
    <!-- 页面内容 -->
</body>
</html>
  • <!DOCTYPE html> 声明文档类型为 HTML5
  • <html> 是根元素,lang="zh-CN" 指定中文语言
  • <head> 包含元数据和引用的外部资源
  • <body> 包含页面可见内容

2. 引入外部资源

<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>
  • Tailwind CSS: 实用优先的 CSS 框架
  • SheetJS (xlsx): 处理 Excel 文件的 JavaScript 库

3. 页面布局与组件

3.1 容器与标题

<div class="max-w-4xl mx-auto bg-white rounded-lg shadow-md p-6">
    <h1 class="text-2xl font-bold mb-6 text-gray-800">
        <i class="fa fa-users mr-2"></i>学生信息管理系统
    </h1>
</div>
  • max-w-4xl mx-auto: 设置最大宽度并居中
  • bg-white rounded-lg shadow-md: 白色背景、圆角和阴影
  • p-6: 内边距

3.2 文件上传区域

<div class="mb-6 border-2 border-dashed border-gray-300 rounded-lg p-8 text-center hover:border-blue-500 transition-colors" 
     id="drop-zone"
     ondragover="event.preventDefault(); this.classList.add('border-blue-500')"
     ondragleave="this.classList.remove('border-blue-500')"
     ondrop="handleFileDrop(event)">
    <input type="file" id="file-input" class="hidden" accept=".xls,.xlsx" />
    <label for="file-input" class="cursor-pointer">
        <!-- SVG 图标和提示文字 -->
    </label>
</div>
  • 实现了拖放文件上传功能
  • hidden 类隐藏原生文件输入
  • accept=".xls,.xlsx" 限制文件类型

3.3 数据表格

<table class="min-w-full divide-y divide-gray-200" id="data-table">
    <thead class="bg-gray-50">
        <tr>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">姓名</th>
            <!-- 其他表头 -->
        </tr>
    </thead>
    <tbody class="bg-white divide-y divide-gray-200">
        <!-- 动态内容 -->
    </tbody>
</table>
  • divide-y 添加行间分隔线
  • 表头(thead)和表体(tbody)分离

4. JavaScript 功能实现

4.1 文件处理逻辑

function processExcel(file) {
    const reader = new FileReader();
    
    reader.onload = function(e) {
        const data = new Uint8Array(e.target.result);
        const workbook = XLSX.read(data, { type: 'array' });
        const worksheet = workbook.Sheets[workbook.SheetNames[0]];
        const jsonData = XLSX.utils.sheet_to_json(worksheet);
        
        // 处理数据...
    };
    
    reader.readAsArrayBuffer(file);
}
  1. 使用 FileReader 读取文件
  2. 通过 SheetJS 解析 Excel 文件
  3. 将工作表转换为 JSON 数据

4.2 动态生成表格内容

const tbody = document.querySelector('#data-table tbody');
tbody.innerHTML = jsonData.map(item => `
    <tr class="hover:bg-gray-50">
        <td class="px-6 py-4 whitespace-nowrap">${item[columns.name] || ''}</td>
        <!-- 其他单元格 -->
    </tr>
`).join('');
  • 使用 map() 遍历数据
  • 模板字符串生成 HTML
  • join('') 将数组转换为字符串

4.3 自动检测列名

function findColumn(data, possibleNames) {
    const keys = Object.keys(data[0]);
    return possibleNames.find(name => 
        keys.some(k => k.toLowerCase() === name.toLowerCase())
    ) || null;
}
  • 支持多种可能的列名
  • 不区分大小写匹配

5. 响应式设计

Tailwind CSS 提供了响应式设计类,例如:

  • md: 中等屏幕及以上
  • lg: 大屏幕及以上

6. 交互效果

6.1 拖放反馈

ondragover="event.preventDefault(); this.classList.add('border-blue-500')"
ondragleave="this.classList.remove('border-blue-500')"
  • 拖拽时添加蓝色边框
  • 拖拽离开时移除

6.2 状态提示

function showStatus(message, type = 'info') {
    const status = document.getElementById('status');
    status.textContent = message;
    status.className = `mt-4 text-sm ${
        info: 'text-blue-600',
        success: 'text-green-600',
        error: 'text-red-600'
    }[type]} transition-colors`;
}
  • 根据类型显示不同颜色
  • 使用对象查找简化条件逻辑

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言