JavaScript實現專案列表的增刪移動
JavaScript實現專案列表的增刪移動
在前面我們已經學習了html和css,相信大家對此應該有了相當的理解
想要完成此項任務我們需要準備以下知識點:
Find()定義和用法
find() 方法返回通過測試(函式內判斷)的陣列的第一個元素的值。
find() 方法為陣列中的每個元素都呼叫一次函式執行:
當陣列中的元素在測試條件時返回 true 時, find() 返回符合條件的元素,之後的值不會再呼叫執行函式。
如果沒有符合條件的元素返回 undefined
當陣列中的元素在測試條件時返回 true 時, find() 返回符合條件的元素,之後的值不會再呼叫執行函式。
如果沒有符合條件的元素返回 undefined
find()語法:
array.find(function(currentValue, index, arr),thisValue)
currentValue表示當前元素,index表示當前元素的索引值,arr表示當前元素所屬的陣列物件,thisValue預設值是this表示當前物件
insertBefore() 方法
insertBefore() 方法在你指定的已有子節點之前插入新的子節點
insertBefore()語法
node.insertBefore(newnode,existingnode)
newnode表示需要插入的節點物件。
existingnode 在其之前插入新節點的子節點。如果未規定,則 insertBefore 方法會在結尾插入 newnode。
Node 物件表示你插入的節點。
思路分析
想要完成這個專案首先我們要明白的是這屬於html中的form標籤知識,因此我們可以在外層套一個Div標籤,然後在它裡面插入一個ul標籤裡面下面用一個li標籤來裝input標籤輸入的內容,旁邊的那些功能鍵我們就用span標籤然後用js定義function來實現各種功能。這樣我們就完成了上半部分。
下半部分我們同樣是利用Div和span標籤來完成佈局。
執行結果:
執行程式碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>js專案列表的增刪和移動</title>
<style>
body{background:#ddd;text-align:center}
.list{display:inline-block;margin-top:20px;padding:40px;border-radius:8px;background:lightsalmon;color:#000000;text-align:left;font-size:13px}
.list-ul{list-style:none;margin:0;padding:0}
.list-option{padding:6px 0;}
.list-input{width:300px;border:1px solid #00FFFF;padding:5px;font-size:16px;color:#333}
.list-input:hover{background:#effaff}
.list-btn span{color:#0065A0;;cursor:pointer}
.list-btn span:hover{text-decoration:underline}
.list-btn b{text-align:center;background-color:#D6EDFF;border-radius:6px;width:20px;height:20px;display:inline-block;margin:0 2px;cursor:pointer;color:#238FCE;border:1px solid #B3DBF8;float:left}
.list-bottom{margin-top:5px}
.list-add-show{color:#f60;cursor:pointer}
.list-add-show:before{position:relative;top:1px;margin-right:5px;content:"+";font-weight:700;font-size:16px;font-family:arial}
.list-add-show span:hover{text-decoration:underline}
.list-add-area{margin-top:5px}
.list-add-add{cursor:pointer;margin-left:5px}
.list-add-cancel{cursor:pointer;margin-left:4px}
.list-add-input{width:180px;border:1px solid #ccc;padding:4px;font-size:14px;color:#333}
.list-add-input:hover{background:#effaff}
.list-tmp{display:none}
.list-hide{display:none}
</style>
</head>
<body>
<form action="" method="">
<div class="list">
<ul class="list-ul">
<li class="list-option">
<input type="text" class="list-input" name="list[]" id="" value="" />
<span class="list-btn">
<span class="list-up"> [上移]</span>
<span class="list-down"> [下移]</span>
<span class="list-del"> [刪除]</span>
</span>
</li>
</ul>
<div class="list-bottom" id="">
<span class="list-add-show">新增專案</span>
<div class="list-add-area list-hide">
新增到列表
<input type="text" class="list-add-input" name="list[]" id="list[]" value="" />
<input type="button" class="list-add-add" value="新增" />
<input class="list-add-cancel" type="button" value="取消" />
</div>
</div>
</div>
</form>
,<script type="text/javascript">
(function(window) {
var SmartList = function(prefix, defList) {
Find.prototype.prefix = prefix;
var find = new Find(document.getElementsByClassName(prefix)[0]); // 獲取物件
var list = new List(find.className('option'));
for (var i in defList) {
list.add(defList[i]);
}
var add = {
'show':find.className('add-show'),
'area':find.className('add-area'),
'input':find.className('add-input'),
'add':find.className('add-add'),
'cancel':find.className('add-cancel')
};
add.show.onclick = function() {
add.area.classList.remove(prefix + '-hide');
};
add.add.onclick = function() {
list.add(add.input.value);
};
add.cancel.onclick = function() {
add.area.classList.add(prefix + '-hide');
};
};
function Find(obj) {
this.obj = obj;
}
Find.prototype = {
prefix: '', //待查詢的字首
className: function(className) {
return this.obj.getElementsByClassName(this.prefix + '-' + className)[0];
},
prev: function() {
var node = this.obj.previousSibling; // 獲取當前元素物件的前一個節點
while (node) {
if (node.nodeType === Node.ELEMENT_NODE) {
break;
}
node = node.previousSibling;
}
return node;
},
next: function() {
var node = this.obj.nextElementSibling; //獲取當前元素物件的後一個節點
while (node) {
if (node.nodeType === Node.ELEMENT_NODE) {
break;
}
node = node.nextElementSibling;
}
return node;
}
}
function List(tmp) { // List建構函式 引數tmp表示操作的<li>元素模板
this.tmp = tmp;
this.obj = tmp.parentNode; // 儲存模板的父節點物件
this.obj.removeChild(tmp); //從<ul>中移除<li>模板
}
List.prototype = {
add: function(value) {
var tmp = this.tmp.cloneNode(true); //克隆一個元素節點
var find = new Find(tmp);
find.className('input').value = value;
var obj = this.obj; //獲取ul元素物件
find.className('up').onclick = function() { //新增上移單擊事件
var prev = find.prev(); //獲取前一個節點
if (prev) {
obj.insertBefore(tmp, prev); //在prev前插入tmp
} else {
alert('這已經是第一張了');
}
};
find.className('down').onclick = function() {
var last = find.next();
if (last) {
obj.insertBefore(next, tmp);
} else {
alert('這已經是最後一張了');
}
};
find.className('del').onclick = function() {
if (confirm('你確定要刪除嗎?')) {
obj.removeChild(tmp);
}
}
this.obj.appendChild(tmp);
}
};
window['SmartList'] = SmartList;
})(window);
SmartList('list', ['Java', 'Linux']); //新增預設專案
</script>
</body>
</html>
相關文章
- python列表刪除專案的方法Python
- JavaScript實戰專案:移動端 Touch 輪播圖JavaScript
- 列表的增刪改查
- vue 工作專案中 實現訊息列表的 全選,反選,刪除功能Vue
- html裡列表滑動刪除的實現如此簡單HTML
- vue 專案中 實現列表的匯出excel表格的功能VueExcel
- QQ增刪功能實現
- 線上商城專案11-商品列表頁的排序實現排序
- vue實現li列表的新增刪除和修改Vue
- js實現表格的增刪改查JS
- Apache的專案列表Apache
- 如何使用JavaScript開發AR(擴增實境)移動應用 (一)JavaScript
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- 小程式 — 實現左滑刪除效果(列表)③
- Go實現對MySQL的增刪改查GoMySql
- 《整潔程式碼cleancode》的javascript原始碼實現專案JavaScript原始碼
- SSM-員工管理專案實戰-CRUD-增刪改查SSM
- day02_品優購電商專案_02_前端框架AngularJS入門 + 品牌列表的實現 + 品牌列表分頁的實現 + 增加/修改/刪除品牌的實現 + 品牌分頁條件查詢的實現_用心筆記前端框架AngularJS筆記
- 使用 flutter 的ListView實現滾動列表FlutterView
- 180行JavaScript程式碼實現的小球隨機移動程式碼JavaScript隨機
- 中移動香港攜手8Manage實現視覺化專案管理視覺化專案管理
- javaScript實現鍵盤控制元素移動位置及縮放JavaScript
- Python實現二叉樹的增、刪、查Python二叉樹
- Java實現簡單的增刪改查操作Java
- jQuery實現購物車的增刪改查jQuery
- 可以增刪和排序的下拉屬性實現排序
- 使用 Git 實現 專案的自動化部署Git
- vue移動端專案快取問題實踐Vue快取
- abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之列表檢視(七)UI
- 運用layui實現增刪改查UI
- vue移動端專案接入vconsole(移動端除錯)Vue除錯
- JDBC連線資料庫實現增刪改查前端互動JDBC資料庫前端
- 用Python實現二叉樹的增、刪、查Python二叉樹
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- 使用 Git 實現 Laravel 專案的自動化部署GitLaravel
- JavaScript表格增刪改查詳解JavaScript
- JavaScript 手動實現instanceof的方法JavaScript
- 單連結串列實現增刪改查