☆ 在学习javascript之初会有很多练手的例子,当还没有接触到后端(java ptython)这些的时候,老师会让我们自己模拟实现一个纯javascript的类后端的增删改效果。
☆ 本文将通过后端的思路,抛弃那些复杂的逻辑,纯前端实现一套增删改查的效果。如果明白了这一套逻辑,那么以后学到ajax的时候再和服务端联调,就会容易理解的多。
☆ 本文通过逻辑讲述,还有完整的源码,源码并且添加了详细的注释与打印输出逻辑,希望你可以学会
目录
顶部布局input输入框做为输入内容区域,
按钮添加addContent事件。
底部预备了id为contentList的div区域用于展示评论列表
- <body>
- <div class="box">
- <div class="comment-box">
- <input type="text" id="inputContent" />
- <button onclick="addContent()">添加</button>
- </div>
- <p>评论区</p>
- <div class="content-list" id="contentList">
-
- </div>
- </div>
- </body>


描述:当输入框输入内容后,点击添加按钮,需要在评论的区域添加一条子div区域,子区域内追加填充评论文字的span元素,后面再追加用于删除的子按钮,再追加用于修改的子按钮。
便于后续模拟在数据库里添加数据,提前定义一个变量 list = [] 定义一个初始化 id = 0 。因为我们每添加的一条评论文案都会填充到这个数组里。而每次删除,修改操作,怎么知道操作的是当前这一行数据呢,当然是要准备一个id,每一行的id都是唯一的。
当添加完成后,再把输入框的内容清空。
第2步在添加的时候,我们给每一条数据添加了id,
唯一的id值。删除的时候用得到。
意思就是要删除,得知道删除的是哪条数据。
所以再删除的时候调用一个deleteOne的方法,通过当前元素id,去list数组里进行匹配,
然后将这一条id所属的list元素删除。
再根据当前元素,获取父DOM元素,进行删除。这样,一条评论就删除了。

跟第3步类似,点击修改的时候,因为我们给每一条数据添加了id属性,唯一的id值。
修改的时候,利用这个id值操作对应的DOM与数据。
但与删除略有不同。修改操作需要通过当前id值,获取到当前所属的评论文本内容,
然后将其给输入框赋值。当再次点添加按钮的时候,还要通过当前id替换掉之前添加的值。


CSS部分
- html, body, * {
- margin: 0;
- padding: 0;
- }
- .box {
- margin: 100px;
- border: 1px dashed red;
- width: 400px;
- min-height: 300px;
- }
- .comment-box {
- padding: 10px;
- border-bottom: 1px solid red;
- }
- input {
- margin-right: 20px;
- width: 280px;
- height: 30px;
- line-height: 30px;
- font-size: 16px;
- }
- p {
- margin: 10px;
- }
- .content-list {
- margin: 10px;
- }
HTML部分
- <div class="box">
- <div class="comment-box">
- <input type="text" id="inputContent" />
- <button onclick="addContent()">添加</button>
- </div>
- <p>评论区</p>
- <div class="content-list" id="contentList"></div>
- </div>
javascript部分
- // 定义模拟数据库的数组
- var list = [];
- // 定义每天数据的id
- var id = 0;
- // 获取input输入框的dom元素
- var inputDom = document.getElementById("inputContent");
- // 提前预设修改的数据id变量
- var updateId = 0;
- function addContent(){
- // 获取评论区大的DOM元素
- var contentList = document.getElementById('contentList');
- // 获取输入框的值
- var val = inputDom.value;
- // 如果updateId有值表示要修改
- if (updateId) {
- var update2Index = 0;
- for (var i=0;i
length;i++) { - if (list[i]['id'] === update2Index) {
- list[i]['val'] = val;
- break;
- }
- }
- var updateContentNode = document.querySelector("#content_"+updateId);
- updateContentNode.innerText = val;
-
- // 输入框清空
- inputDom.value = '';
- // 修改id清空
- updateId = 0;
- console.log('修改后的数据库', list);
- // 如果是修改逻辑,及时return掉,不走添加逻辑
- return;
- }
-
- // 开始添加的逻辑
- // 每天数据id自加1
- id++;
- // 创建单条评论的区域
- var oneDiv = document.createElement('div');
- contentList.appendChild(oneDiv);
- oneDiv.style.margin = '10px 0';
- // 创建单挑评论的文案区域
- var oneSpan = document.createElement('span');
- oneDiv.appendChild(oneSpan);
- oneSpan.innerText = val;
- oneSpan.setAttribute('id', 'content_' + id);
- // 创建单条评论的删除按钮
- var oneADelete = document.createElement('a');
- oneDiv.appendChild(oneADelete);
- oneADelete.setAttribute('href', 'javascript:void(0);');
- oneADelete.style.marginLeft = '20px';
- oneADelete.innerText = '删除'
- oneADelete.setAttribute('delete_id', id);
- oneADelete.onclick = deleteOne;
- // 创建单挑评论的修改按钮
- var oneAUpdate = document.createElement('a');
- oneDiv.appendChild(oneAUpdate);
- oneAUpdate.setAttribute('href', 'javascript:void(0);');
- oneAUpdate.style.marginLeft = '20px';
- oneAUpdate.innerText = '修改'
- oneAUpdate.onclick = updateOne;
- oneAUpdate.setAttribute('update_id', id);
- // 添加完后清空输入框的值
- inputDom.value = '';
- // 将单条添加的数据存入数据库
- list.push({
- id,
- val
- })
- console.log('添加后的数据库', list);
- }
- function deleteOne(event) {
- var obj = event.target || event.srcElement;
- // 获取要删除数据的id
- var deleteId = Number(obj.getAttribute('delete_id'));
- var deleteIndex = 0;
- console.log('要删除的数据id', deleteId);
-
- for (var i=0;i
length;i++) { - if (list[i]['id'] === deleteId) {
- deleteIndex = i;
- break;
- }
- }
- console.log('要删除的数据索引', deleteIndex);
- list.splice(deleteIndex, 1);
-
- var fatherNode = obj.parentNode;
- var superParentNode = fatherNode.parentNode;
- superParentNode.removeChild(fatherNode);
-
- console.log('删除后的数据库', list);
- }
- function updateOne(event) {
- var obj = event.target || event.srcElement;
- // 获取要修改数据的id,并存入全局updateId
- updateId = Number(obj.getAttribute('update_id'));
- var updateContent = '';
- console.log('要修改的数据id', updateId);
-
- for (var i=0;i
length;i++) { - if (list[i]['id'] === updateId) {
- updateContent = list[i]['val'];
- break;
- }
- }
- inputDom.value = updateContent;
- }