<h1>通讯录</h1> <button class="add-btn">添加联系人</button> <input type="text" id="search-input" placeholder="搜索姓名或电话"> <table> <thead> <tr> <th>姓名</th> <th>电话</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody id="contact-list"> <!-- 数据渲染 --> </tbody> </table> <!-- 分页按钮 --> <div id="page-buttons"></div> <!-- 弹出层,用于添加或编辑联系人 --> <div id="modal" class="modal" style="display: none;"> <div class="modal-content"> <span class="close">×</span> <form> <div class="form-group"> <label for="name">姓名</label> <input type="text" id="name" name="name" required> </div> <div class="form-group"> <label for="phone">电话</label> <input type="text" id="phone" name="phone" required> </div> <div class="form-group"> <label for="email">邮箱</label> <input type="text" id="email" name="email" required> </div> <button id="save-btn">保存</button> <button id="cancel-btn">取消</button> </form> </div> </div>帮我加入一个搜索框,可以查找到搜索框中输入的内容;让数据具有添加删除和编辑的功能,编辑的时候增加弹窗进行编辑;添加翻页的功能,每一页最多存放五条数据

时间: 2023-06-26 20:09:23 浏览: 55
好的,我可以帮你完成这个需求。首先,我们需要添加一个搜索框,可以通过输入姓名或电话来查找联系人。我会给你一个基本的HTML和JavaScript代码,你可以根据你的需求进行修改和完善。 HTML代码: ``` <h1>通讯录</h1> <button class="add-btn">添加联系人</button> <input type="text" id="search-input" placeholder="搜索姓名或电话"> <table> <thead> <tr> <th>姓名</th> <th>电话</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody id="contact-list"> <!-- 数据渲染 --> </tbody> </table> <!-- 分页按钮 --> <div id="page-buttons"></div> <!-- 弹出层,用于添加或编辑联系人 --> <div id="modal" class="modal" style="display: none;"> <div class="modal-content"> <span class="close">×</span> <form> <div class="form-group"> <label for="name">姓名</label> <input type="text" id="name" name="name" required> </div> <div class="form-group"> <label for="phone">电话</label> <input type="text" id="phone" name="phone" required> </div> <div class="form-group"> <label for="email">邮箱</label> <input type="text" id="email" name="email" required> </div> <button id="save-btn">保存</button> <button id="cancel-btn">取消</button> </form> </div> </div> ``` JavaScript代码: ``` // 定义一个数组,用于存放联系人数据 var contacts = [ { name: '张三', phone: '13800138000', email: 'zhangsan@example.com' }, { name: '李四', phone: '13900139000', email: 'lisi@example.com' }, { name: '王五', phone: '13600136000', email: 'wangwu@example.com' }, { name: '赵六', phone: '13700137000', email: 'zhaoliu@example.com' }, { name: '钱七', phone: '13500135000', email: 'qianqi@example.com' } ]; // 定义一个变量,用于存放当前页码 var currentPage = 1; // 定义一个函数,用于渲染联系人列表 function renderContacts() { // 获取搜索框中的输入内容 var searchText = document.getElementById('search-input').value; // 如果搜索框中有输入内容,则只渲染符合条件的联系人数据 if (searchText) { var filteredContacts = contacts.filter(function(contact) { return contact.name.indexOf(searchText) !== -1 || contact.phone.indexOf(searchText) !== -1; }); renderContactList(filteredContacts); } else { // 否则,渲染所有联系人数据 renderContactList(contacts); } } // 定义一个函数,用于渲染联系人列表 function renderContactList(data) { // 获取tbody元素 var tbody = document.getElementById('contact-list'); // 清空tbody元素中的内容 tbody.innerHTML = ''; // 计算起始索引和结束索引 var startIndex = (currentPage - 1) * 5; var endIndex = Math.min(startIndex + 5, data.length); // 遍历符合条件的联系人数据,并将其添加到tbody元素中 for (var i = startIndex; i < endIndex; i++) { var tr = document.createElement('tr'); tr.innerHTML = '<td>' + data[i].name + '</td>' + '<td>' + data[i].phone + '</td>' + '<td>' + data[i].email + '</td>' + '<td><button class="edit-btn" data-index="' + i + '">编辑</button><button class="delete-btn" data-index="' + i + '">删除</button></td>'; tbody.appendChild(tr); } // 渲染分页按钮 renderPageButtons(data.length); } // 定义一个函数,用于渲染分页按钮 function renderPageButtons(totalCount) { // 获取分页按钮所在的容器元素 var pageButtonsContainer = document.getElementById('page-buttons'); // 计算总页数 var totalPage = Math.ceil(totalCount / 5); // 清空分页按钮容器元素中的内容 pageButtonsContainer.innerHTML = ''; // 如果总页数大于1,则渲染分页按钮 if (totalPage > 1) { for (var i = 1; i <= totalPage; i++) { var button = document.createElement('button'); button.innerText = i; button.classList.add('page-btn'); if (i === currentPage) { button.classList.add('active'); } pageButtonsContainer.appendChild(button); } } } // 定义一个函数,用于显示弹出层 function showModal(title, data, onSave) { // 获取弹出层元素 var modal = document.getElementById('modal'); // 获取弹出层中的表单元素 var form = modal.querySelector('form'); // 获取弹出层中的关闭按钮元素 var closeButton = modal.querySelector('.close'); // 获取弹出层中的保存按钮元素 var saveButton = modal.querySelector('#save-btn'); // 获取弹出层中的姓名输入框元素 var nameInput = modal.querySelector('#name'); // 获取弹出层中的电话输入框元素 var phoneInput = modal.querySelector('#phone'); // 获取弹出层中的邮箱输入框元素 var emailInput = modal.querySelector('#email'); // 设置弹出层中的标题 modal.querySelector('h2').innerText = title; // 如果传入了联系人数据,则将其填充到表单中 if (data) { nameInput.value = data.name; phoneInput.value = data.phone; emailInput.value = data.email; } else { nameInput.value = ''; phoneInput.value = ''; emailInput.value = ''; } // 绑定关闭按钮的点击事件处理函数 closeButton.addEventListener('click', function() { modal.style.display = 'none'; }); // 绑定保存按钮的点击事件处理函数 saveButton.addEventListener('click', function(event) { event.preventDefault(); // 如果姓名或电话或邮箱为空,则弹出提示框 if (!nameInput.value || !phoneInput.value || !emailInput.value) { alert('姓名、电话和邮箱不能为空!'); return; } // 调用保存函数,并传入表单中的数据 onSave({ name: nameInput.value, phone: phoneInput.value, email: emailInput.value }); // 隐藏弹出层 modal.style.display = 'none'; }); // 显示弹出层 modal.style.display = 'block'; } // 定义一个函数,用于添加联系人 function addContact(contact) { // 将联系人数据添加到数组中 contacts.push(contact); // 重新渲染联系人列表和分页按钮 renderContacts(); } // 定义一个函数,用于删除联系人 function deleteContact(index) { // 从数组中删除指定索引的联系人数据 contacts.splice(index, 1); // 重新渲染联系人列表和分页按钮 renderContacts(); } // 定义一个函数,用于更新联系人 function updateContact(index, contact) { // 更新指定索引的联系人数据 contacts[index] = contact; // 重新渲染联系人列表和分页按钮 renderContacts(); } // 页面加载完成后,初始化联系人列表和分页按钮 window.addEventListener('load', function() { // 渲染联系人列表和分页按钮 renderContacts(); // 绑定添加联系人按钮的点击事件处理函数 var addButton = document.querySelector('.add-btn'); addButton.addEventListener('click', function() { showModal('添加联系人', null, addContact); }); // 绑定分页按钮的点击事件处理函数 var pageButtonsContainer = document.getElementById('page-buttons'); pageButtonsContainer.addEventListener('click', function(event) { if (event.target.classList.contains('page-btn')) { currentPage = parseInt(event.target.innerText); renderContacts(); } }); // 绑定编辑按钮的点击事件处理函数 var tbody = document.getElementById('contact-list'); tbody.addEventListener('click', function(event) { if (event.target.classList.contains('edit-btn')) { var index = parseInt(event.target.getAttribute('data-index')); showModal('编辑联系人', contacts[index], function(contact) { updateContact(index, contact); }); } }); // 绑定删除按钮的点击事件处理函数 tbody.addEventListener('click', function(event) { if (event.target.classList.contains('delete-btn')) { var index = parseInt(event.target.getAttribute('data-index')); if (confirm('确定要删除该联系人吗?')) { deleteContact(index); } } }); // 绑定搜索框的输入事件处理函数 var searchInput = document.getElementById('search-input'); searchInput.addEventListener('input', function() { renderContacts(); }); }); ``` 这段代码实现了以下功能: 1. 定义了一个数组,用于存放联系人数据。 2. 定义了一个变量,用于存放当前页码。 3. 定义了一个函数,用于渲染联系人列表。 4. 定义了一个函数,用于渲染分页按钮。 5. 定义了一个函数,用于显示弹出层。 6. 定义了三个函数,分别用于添加、删除和更新联系人。 7. 页面加载完成后,初始化联系人列表和分页按钮,并绑定相应的事件处理函数。 你可以将这段代码复制到你的项目中,并根据你的需求进行修改和完善。

最新推荐

recommend-type

setuptools-40.7.3-py2.py3-none-any.whl

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

Centos7-离线安装redis

Centos7-离线安装redis
recommend-type

setuptools-39.0.1-py2.py3-none-any.whl

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

基于JSP实现的在线仓库管理系统源码.zip

这个是一个JSP实现的在线仓库管理系统,管理员角色包含以下功能:仓库管理员登录,货品&amp;类别信息管理,采购信息管理,出库和入库管理,财务信息管理,管理员管理等功能。 本项目实现的最终作用是基于JSP实现的在线仓库管理系统 分为1个角色 第1个角色为管理员角色,实现了如下功能: - 仓库管理员登录 - 出库和入库管理 - 管理员管理 - 财务信息管理 - 货品&类别信息管理 - 采购信息管理
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依