1. 程式人生 > >百度前端技術學院:第三十一到第三十三天:我是精明的小賣家(一)

百度前端技術學院:第三十一到第三十三天:我是精明的小賣家(一)

var regionGroup = document.getElementById("region-radio-wrapper"); var productGroup = document.getElementById("product-radio-wrapper"); var tableDiv = document.getElementById("table-wrapper"); function checkBoxGroup(checkBoxName, data) { var allSelect = document.
createElement("input"); allSelect.setAttribute("type", "checkbox"); allSelect.setAttribute("checkbox-type", "all"); allSelect.setAttribute("value", "0"); var text = document.createTextNode("全選"); checkBoxName.appendChild(allSelect); checkBoxName.
appendChild(text); for (var i = 0; i < data.length; i++) { var select = document.createElement("input"); select.setAttribute("type", "checkbox"); select.setAttribute("value", i + 1); select.setAttribute("checkbox-type", "single"
) var text = document.createTextNode(data[i].text); checkBoxName.appendChild(select); checkBoxName.appendChild(text); } checkBoxName.onclick = function (event) { var event = event || window.event; var target = event.target || event.srcElement; if (target.getAttribute("type") == "checkbox") { var len = checkBoxName.childNodes.length; var count = 0; var checkBoxType = target.getAttribute("checkbox-type"); if (checkBoxType == "all") { if (target.checked == true) { for (var i = 2; i < len; i++) { //checkBoxName.childNodes[i].getchecked = true; if (checkBoxName.childNodes[i].tagName == "INPUT") { checkBoxName.childNodes[i].checked = true; console.log(checkBoxName.childNodes[i]); } } } else { target.checked = true; } } if (checkBoxType == "single") { for (var i = 2; i < len; i++) { if (checkBoxName.childNodes[i].checked == true) { count++; console.log(checkBoxName.childNodes[i]); } } console.log(count); if (count == len / 2 - 1 && allSelect.checked == false) { allSelect.checked = true; } else if (count < len / 2 - 1 && count > 0) { allSelect.checked = false; } else if (count == 0) { target.checked = true; } } } createTable(); } } function getData(checkBoxName) { var checkBoxNamelen = checkBoxName.childNodes.length; var checkBoxNameArr = new Array(); for (var i = 2; i < checkBoxNamelen; i++) { if (checkBoxName.childNodes[i].checked == true) { checkBoxNameArr.push(checkBoxName.childNodes[i + 1].textContent); } } return checkBoxNameArr; } function getTableData() { selectRegion = getData(regionGroup); selectProduct = getData(productGroup); var arr = new Array(); console.log(selectRegion); for (var z = 0; z < selectProduct.length; z++) { for (var i = 0; i < selectRegion.length; i++) { for (var j = 0; j < sourceData.length; j++) { if (sourceData[j].region == selectRegion[i] && sourceData[j].product == selectProduct[z]) { arr.push(sourceData[j]); } } } } console.log(arr); return arr; } function createTable() { if (tableDiv.childNodes[0]) { tableDiv.removeChild(tableDiv.childNodes[0]); } arr = getTableData(); table = document.createElement("table"); regionLen = selectRegion.length; productLen = selectProduct.length; if (productLen == 1 && regionLen >= 1) { diffTable1();//可以換成diffTable3(),該函式包含diffTable1()的情況。 } else if (regionLen == 1 && productLen > 1) { diffTable2(); } else if (regionLen > 1 && productLen > 1) { diffTable3(); } //把生成的HTML內容賦給table - wrapper document.querySelector("#table-wrapper").appendChild(table); } function diffTable1() { // 輸出表頭:商品、地區、1月、2月、…… 12月 var headTable = ["商品", "地區", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]; var header = table.createTHead(); var tr0 = header.insertRow(0); for (var i = 0; i < headTable.length; i++) { var th = tr0.insertCell(tr0.cells.length); th.innerHTML = headTable[i]; } /* 遍歷資料 { 輸出每一行的表格HTML內容 } */ for (var i = 0; i < arr.length; i++) { if (i == 0) { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0); td.innerHTML = arr[i].product; td.rowSpan = arr.length; var td = tr.insertCell(1); td.innerHTML = arr[i].region; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 2); td.innerHTML = arr[i].sale[j]; } } else { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0);//合併單元格後,後面行少一個單元格 td.innerHTML = arr[i].region; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 1); td.innerHTML = arr[i].sale[j]; } } } } function diffTable2() { // 輸出表頭:商品、地區、1月、2月、…… 12月 var headTable = ["地區", "商品", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]; var header = table.createTHead(); var tr0 = header.insertRow(0); for (var i = 0; i < headTable.length; i++) { var th = tr0.insertCell(tr0.cells.length); th.innerHTML = headTable[i]; } /* 遍歷資料 { 輸出每一行的表格HTML內容 } */ for (var i = 0; i < arr.length; i++) { if (i == 0) { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0); td.innerHTML = arr[i].region; td.rowSpan = arr.length; var td = tr.insertCell(1); td.innerHTML = arr[i].product; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 2); td.innerHTML = arr[i].sale[j]; } } else { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0);//合併單元格後,後面行少一個單元格 td.innerHTML = arr[i].product; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 1); td.innerHTML = arr[i].sale[j]; } } } } function diffTable3() { // 輸出表頭:商品、地區、1月、2月、…… 12月 var headTable = ["商品", "地區", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]; var header = table.createTHead(); var tr0 = header.insertRow(0); for (var i = 0; i < headTable.length; i++) { var th = tr0.insertCell(tr0.cells.length); th.innerHTML = headTable[i]; } for (var i = 0; i < productLen; i++) { for (var z = 0; z < regionLen; z++) { if (z == 0) { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0); td.innerHTML = arr[z + i * regionLen].product; td.rowSpan = regionLen; var td = tr.insertCell(1); td.innerHTML = arr[z + i * regionLen].region; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 2); td.innerHTML = arr[z + i * regionLen].sale[j]; } } else { var tr = table.insertRow(table.rows.length); var td = tr.insertCell(0);//合併單元格後,後面行少一個單元格 td.innerHTML = arr[z + i * regionLen].region; for (var j = 0; j < 12; j++) { var td = tr.insertCell(j + 1); td.innerHTML = arr[z + i * regionLen].sale[j]; } } } } } // 物件或陣列自己根據喜好實現均可 checkBoxGroup(regionGroup, [{ value: 1, text: "華北" }, { value: 2, text: "華南" }, { value: 3, text: "華東" } ]); checkBoxGroup(productGroup, [{ value: 1, text: "手機" }, { value: 2, text: "筆記本" }, { value: 3, text: "智慧音箱" } ]);