Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日本欧美一区,麻豆精品国产免费观看,中文字幕在线看视频一区二区三区

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          如何用JavaScript將網(wǎng)頁(yè)表格數(shù)據(jù)轉(zhuǎn)換為CSV文件

          網(wǎng)頁(yè)開(kāi)發(fā)中,我們經(jīng)常需要將表格中的數(shù)據(jù)導(dǎo)出為CSV文件,以便進(jìn)行數(shù)據(jù)分析或共享。今天,我們就來(lái)分享一下如何通過(guò)JavaScript實(shí)現(xiàn)這個(gè)功能。具體實(shí)現(xiàn)步驟包括:提取表格數(shù)據(jù)、構(gòu)建CSV字符串、創(chuàng)建下載鏈接以及觸發(fā)下載操作。希望這個(gè)教程能幫你輕松實(shí)現(xiàn)表格數(shù)據(jù)導(dǎo)出功能!

          完整代碼片段

          首先,我們來(lái)看一下完整的代碼片段,然后再進(jìn)行分段介紹。

          function extractTableData(tableId) {
            const table = document.getElementById(tableId);
            const data = [];
          
            for (const row of table.rows) {
              const rowData = [];
              for (const cell of row.cells) {
                rowData.push(cell.innerText.trim());
              }
              data.push(rowData);
            }
          
            return data;
          }
          
          function buildCsvString(data) {
            return data.map(row => row.join(',')).join('\n');
          }
          
          function createDownloadLink(csvContent) {
            const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8' });
            return URL.createObjectURL(blob);
          }
          
          function triggerDownload(url, filename) {
            const link = document.createElement('a');
            link.href = url;
            link.download = filename;
            link.click();
            URL.revokeObjectURL(url);
          }
          
          function exportTableToCsv(tableId, filename) {
            const tableData = extractTableData(tableId);
            const csvContent = buildCsvString(tableData);
            const downloadUrl = createDownloadLink(csvContent);
            triggerDownload(downloadUrl, filename);
          }
          
          // 調(diào)用示例
          exportTableToCsv('myTableId', 'exported_data.csv');

          提取表格數(shù)據(jù)

          首先,我們需要通過(guò) document.getElementById 選擇目標(biāo)表格。然后,我們使用 for...of 循環(huán)遍歷每一行 (<tr>) 和每一個(gè)單元格 (<td>),提取其中的文本內(nèi)容并去除多余的空格。

          function extractTableData(tableId) {
            const table = document.getElementById(tableId);
            const data = [];
          
            for (const row of table.rows) {
              const rowData = [];
              for (const cell of row.cells) {
                rowData.push(cell.innerText.trim());
              }
              data.push(rowData);
            }
          
            return data;
          }

          在這個(gè)函數(shù)中,我們首先通過(guò)ID獲取目標(biāo)表格,然后遍歷每一行和每一個(gè)單元格,將單元格的文本內(nèi)容去除多余空格后存入一個(gè)數(shù)組,最后將這個(gè)數(shù)組推入 data 數(shù)組中。

          構(gòu)建CSV字符串

          接下來(lái),我們創(chuàng)建一個(gè)函數(shù) buildCsvString,將提取的表格數(shù)據(jù)構(gòu)建成CSV字符串。我們使用逗號(hào)(,)連接每行的數(shù)據(jù),并用換行符(\n)連接每行。

          function buildCsvString(data) {
            return data.map(row => row.join(',')).join('\n');
          }

          在這個(gè)函數(shù)中,我們使用 map 方法遍歷每一行的數(shù)據(jù),將每行數(shù)據(jù)用逗號(hào)連接成字符串,然后再用換行符將所有行連接成一個(gè)完整的CSV字符串。

          創(chuàng)建下載鏈接

          使用 Blob 對(duì)象創(chuàng)建一個(gè)表示CSV數(shù)據(jù)的blob,并將其類型設(shè)置為 text/csv。然后,使用 URL.createObjectURL 創(chuàng)建一個(gè)臨時(shí)的URL來(lái)指向這個(gè)blob。

          function createDownloadLink(csvContent) {
            const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8' });
            return URL.createObjectURL(blob);
          }

          在這個(gè)函數(shù)中,我們首先創(chuàng)建一個(gè) Blob 對(duì)象,并將CSV內(nèi)容傳入。然后,使用 URL.createObjectURL 方法創(chuàng)建一個(gè)指向這個(gè) Blob 對(duì)象的臨時(shí)URL。

          觸發(fā)下載

          最后,我們創(chuàng)建一個(gè)新的錨點(diǎn) (<a>) 元素,并將其 href 屬性設(shè)置為臨時(shí)URL,download 屬性設(shè)置為我們想要的文件名(例如,"exported_data.csv")。然后,模擬點(diǎn)擊事件以啟動(dòng)下載。

          function triggerDownload(url, filename) {
            const link = document.createElement('a');
            link.href = url;
            link.download = filename;
            link.click();
            URL.revokeObjectURL(url);
          }

          在這個(gè)步驟中,我們創(chuàng)建一個(gè)新的 <a> 元素,并設(shè)置其 hrefdownload 屬性。然后,通過(guò)調(diào)用 click 方法模擬一次點(diǎn)擊事件,觸發(fā)文件下載。最后,使用 URL.revokeObjectURL 方法釋放這個(gè)臨時(shí)URL。

          整合函數(shù)

          最后,我們將上述步驟整合到一個(gè)函數(shù)中,便于調(diào)用。

          function exportTableToCsv(tableId, filename) {
            const tableData = extractTableData(tableId);
            const csvContent = buildCsvString(tableData);
            const downloadUrl = createDownloadLink(csvContent);
            triggerDownload(downloadUrl, filename);
          }
          
          // 調(diào)用示例
          exportTableToCsv('myTableId', 'exported_data.csv');

          通過(guò)以上步驟,你就可以輕松實(shí)現(xiàn)將表格數(shù)據(jù)導(dǎo)出為CSV文件的功能了。希望這篇教程對(duì)你有所幫助!如果有任何問(wèn)題或建議,歡迎在評(píng)論區(qū)留言互動(dòng)。

          結(jié)語(yǔ)

          導(dǎo)出表格數(shù)據(jù)為CSV文件是一個(gè)非常實(shí)用的功能,不僅可以幫助我們方便地保存和分享數(shù)據(jù),還可以用于數(shù)據(jù)分析和處理。希望通過(guò)這篇文章,你能夠掌握這一技巧,并在實(shí)際項(xiàng)目中應(yīng)用。如果你覺(jué)得這篇文章對(duì)你有幫助,記得點(diǎn)贊、收藏并分享給更多的小伙伴!如果你有任何問(wèn)題或需要進(jìn)一步的幫助,歡迎在評(píng)論區(qū)留言,我會(huì)及時(shí)回復(fù)你。謝謝閱讀!

          么是JSTL呢?JSTL英文全稱是:JavaServer Pages Standard Tag Library,中文意思是:Java服務(wù)頁(yè)面標(biāo)準(zhǔn)標(biāo)簽類庫(kù)。為什么會(huì)出現(xiàn)JSTL標(biāo)簽庫(kù)呢???我們來(lái)看下這種情況:假設(shè)現(xiàn)在需要循環(huán)渲染一個(gè)列表內(nèi)容,在沒(méi)有出現(xiàn)JSTL之前,如果使用JSP開(kāi)發(fā),那么我們可能會(huì)寫出下面這種代碼:

          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>案例代碼</title>
          </head>
          <body>
              <h3>循環(huán)輸出li列表</h3>
              <% for (int i = 0; i < 5; i++) { %>
                  <li>
                      這是第<%=i %>個(gè)列表內(nèi)容
                  </li>
              <% } %>
          </body>
          </html>

          最終實(shí)現(xiàn)的效果就如下所示:

          雖然上面的代碼可以實(shí)現(xiàn)循環(huán)輸出內(nèi)容的功能,但是你可以看到html代碼和Java代碼互相嵌套在一起,可讀性較差,并且后面代碼越來(lái)越多的時(shí)候,可維護(hù)性也會(huì)變得很差。為了解決這個(gè)問(wèn)題,提高JSP文件中Java代碼的可讀性,于是就出現(xiàn)了JSTL標(biāo)簽庫(kù),sun公司將常用的功能代碼封裝成了一個(gè)個(gè)指定的類似xml的標(biāo)簽,例如:<c:if>、<c:forEach>等等,并且結(jié)合EL表達(dá)式獲取到數(shù)據(jù),進(jìn)行數(shù)據(jù)的渲染,最終完成整個(gè)HTML網(wǎng)頁(yè)的展示。

          1.1、<c:forEach>循環(huán)標(biāo)簽

          <c:forEach>標(biāo)簽的作用是循環(huán)輸出內(nèi)容,是來(lái)自于JSTL核心標(biāo)簽庫(kù),標(biāo)簽庫(kù)地址:http://java.sun.com/jsp/jstl/core。我們?cè)谑褂脴?biāo)簽庫(kù)的時(shí)候,需要使用<%@taglib%>指令,語(yǔ)法格式如下所示:

          // prefix屬性用于指定前綴名稱,一般寫【c】
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

          如下圖所示:

          通過(guò)<%@ taglib%>指令引入core核心庫(kù)標(biāo)簽之后,就可以在當(dāng)前JSP頁(yè)面中使用JSTL標(biāo)簽啦。<c:forEach>標(biāo)簽的語(yǔ)法格式如下所示:

          <%--
              items 屬性:需要循環(huán)變量的數(shù)據(jù)集合
              begin 屬性:從哪個(gè)下標(biāo)開(kāi)始循環(huán)
              end 屬性:哪個(gè)下標(biāo)結(jié)束循環(huán)
              step 屬性:每一次循環(huán)的步長(zhǎng)
              var 屬性:當(dāng)前遍歷到的元素變量名稱
              varStatus 屬性:當(dāng)前遍歷到的元素狀態(tài);
                  index:可以通過(guò)index屬性獲取到當(dāng)前元素下標(biāo),從0開(kāi)始;
                  count:通過(guò)count屬性獲取當(dāng)前第幾次循環(huán),從1開(kāi)始;
                  first:是否第一個(gè)元素;
                  last:是否最后一個(gè)元素;
                  current:獲取當(dāng)前元素;
                  begin:開(kāi)始下標(biāo);
                  end:結(jié)束下標(biāo);
                  step:步長(zhǎng);
          --%>
              <c:forEach items="${randomNumList}" begin="0" end="3" step="1" var="item" varStatus="status">
                  <li>當(dāng)前元素:${item},下標(biāo):${status.index},總數(shù):${status.count}</li>
              </c:forEach>

          其中varStatus屬性具有下面這些屬性值

          下面來(lái)看看<c:forEach>標(biāo)簽的具體案例代碼。

          1.3、案例代碼

          <%@ page import="java.util.List" %>
          <%@ page import="java.util.ArrayList" %>
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <%-- 引入標(biāo)簽庫(kù) --%>
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <html>
          <head>
              <title>JSTL標(biāo)簽庫(kù)之c:for標(biāo)簽</title>
          </head>
          <body>
              <%
                  List<Double> randomNumList = new ArrayList<>();
                  for (int i = 0; i < 10; i++) {
                      randomNumList.add(Math.random() * 100);
                  }
                  pageContext.setAttribute("randomNumList", randomNumList);
              %>
              <h3>JSTL標(biāo)簽庫(kù)之c:for標(biāo)簽</h3>
              <h3>c:for循環(huán)標(biāo)簽</h3>
          <%--
              items 屬性:需要循環(huán)變量的數(shù)據(jù)集合
              begin 屬性:從哪個(gè)下標(biāo)開(kāi)始循環(huán)
              end 屬性:哪個(gè)下標(biāo)結(jié)束循環(huán)
              step 屬性:每一次循環(huán)的步長(zhǎng)
              var 屬性:當(dāng)前遍歷到的元素變量名稱
              varStatus 屬性:當(dāng)前遍歷到的元素狀態(tài);
                  index:可以通過(guò)index屬性獲取到當(dāng)前元素下標(biāo),從0開(kāi)始;
                  count:通過(guò)count屬性獲取當(dāng)前第幾次循環(huán),從1開(kāi)始;
                  first:是否第一個(gè)元素;
                  last:是否最后一個(gè)元素;
                  current:獲取當(dāng)前元素;
                  begin:開(kāi)始下標(biāo);
                  end:結(jié)束下標(biāo);
                  step:步長(zhǎng);
          --%>
              <c:forEach items="${randomNumList}" begin="0" end="3" step="1" var="item" varStatus="status">
                  <li>當(dāng)前元素:${item},下標(biāo):${status.index},總數(shù):${status.count}</li>
              </c:forEach>
          </body>
          </html>

          運(yùn)行結(jié)果如下所示:

          以上,就是JSTL中的<c:forEach>循環(huán)語(yǔ)句標(biāo)簽的使用,<c:forEach>標(biāo)簽就是Java語(yǔ)言中的for語(yǔ)句。

          今天就到這里,未完待續(xù)~~

          一章節(jié)我們探討了Vue的入門,對(duì)Vue有了初步的了解,并且掌握了模板語(yǔ)法。本節(jié)課我們的學(xué)習(xí)目標(biāo)是Vue的指令。

          首先解釋以下什么叫做指令,指定就是命令的意思,人們用指令表達(dá)自己的意圖。Vue中有多種指令,每種指令有不同的功能,比如有個(gè)指令的名字叫做v-text,此指令用于主要用來(lái)更新html標(biāo)簽InnerText內(nèi)容,等同于JS操作dom元素的text屬性。

          除此以外vue還提供了多種指令,接下來(lái)我們就開(kāi)始詳細(xì)介紹這些指令的使用場(chǎng)景已經(jīng)使用方式。

          2.1 什么是指令

          我們已經(jīng)了解到Vue雖然使用場(chǎng)景與功能類似于JQuery,但是語(yǔ)法習(xí)慣完全不同于JQuery,比如Vue使用步驟主要有實(shí)例化Vue對(duì)象,掛載點(diǎn)使用模板語(yǔ)法綁定數(shù)據(jù)。除此以外Vue指令也是Vue使用中的重要組成部分,根據(jù)不同的指令有不同的功能,比如綁定事件,渲染InnerText數(shù)據(jù),渲染InnerHtml數(shù)據(jù)。

          2.1.1 什么是Vue指令

          Vue中的指令存在的形式是以“v-”為前綴的特殊屬性,出現(xiàn)在html的標(biāo)簽的屬性部分,功能是當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM。

          Vue指令的組成部分如下所示。

          <tag標(biāo)簽 v-指令名="表達(dá)式"> </tag標(biāo)簽>

          2.1.2 DOM節(jié)點(diǎn)

          無(wú)論是傳統(tǒng)的原生js,還是老牌前端框架JQuery,包括正在學(xué)習(xí)的Vue,他們的功能主要都是操作dom節(jié)點(diǎn)對(duì)象,我們這里再?gòu)?fù)習(xí)一下dom節(jié)點(diǎn)的相關(guān)概念,因?yàn)橹噶罹褪菍?duì)DOM節(jié)點(diǎn)的操作。在 HTML DOM 中 , 每一個(gè)元素都是節(jié)點(diǎn),Vue指令就是節(jié)點(diǎn)的特殊屬性。Vue.js是數(shù)據(jù)驅(qū)動(dòng)的,無(wú)需手動(dòng)操作DOM,它通過(guò)指令語(yǔ)法,將DOM和數(shù)據(jù)綁定起來(lái)。一旦創(chuàng)建了綁定,DOM將和數(shù)據(jù)保持同步,每當(dāng)變更了數(shù)據(jù),DOM也會(huì)相應(yīng)地更新。

          2.2 指令一覽

          Vue提供了多種內(nèi)置的指令,不同的指令有不同的功能,在具體學(xué)習(xí)每種指令之前,我們先將部分常見(jiàn)指令以表格形式進(jìn)行一覽,如圖2.1所示。

          圖2.1 部分指令一覽

          2.3 v-if & v-else-if & v-else指令

          先描述一個(gè)場(chǎng)景:現(xiàn)有一組標(biāo)簽,此標(biāo)簽展示內(nèi)容只有在當(dāng)前用戶符合某些條件的情況下才顯示。

          這種類型的功能在開(kāi)發(fā)中是十分常見(jiàn)的,實(shí)現(xiàn)思路也很簡(jiǎn)單,需要先進(jìn)行判斷是否符合條件,根據(jù)判斷結(jié)果來(lái)決定是否展示標(biāo)簽。在Vue中想要實(shí)現(xiàn)此種功能,就需要使用v-if指令。

          2.3.1 v-if指令

          我們使用v-if指令來(lái)實(shí)現(xiàn)剛才描述的場(chǎng)景,創(chuàng)建index.html文件,并使用上一章節(jié)中我們學(xué)習(xí)過(guò)的內(nèi)容快速加載Vue環(huán)境,這里就不在重新闡述。index.html中判斷當(dāng)前l(fā)evel的值是否大于等于10,如果大于10在頁(yè)面中顯示文字:“歡迎來(lái)自艾歐尼亞的最強(qiáng)王者上機(jī)!”如果levle的值小于10則什么都不顯示。為了實(shí)現(xiàn)此效果,我們需要使用到v-if指令。index.html代碼內(nèi)容如2-1所示:

          例2-1 index.html

          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
          6. <title>v-if指令</title>
          7. </head>
          8. <body>
          9. <div id="app">
          10. <!--span只有在levle的值大于等于10的時(shí)候才顯示-->
          11. <span v-if="levle>=10">歡迎來(lái)自艾歐尼亞的最強(qiáng)王者上機(jī)!</span>
          12. </div>

          主站蜘蛛池模板: 国产精品免费一区二区三区四区| 最美女人体内射精一区二区| 国产一区二区三区在线看片| 亚洲AV无码一区二区三区在线观看| 亚洲第一区视频在线观看| 国产一区二区三区在线免费| 无码午夜人妻一区二区不卡视频| 亚洲AV综合色区无码一区| 国产一区二区三区不卡在线看| 中文字幕在线观看一区二区| 久久成人国产精品一区二区| 日本高清无卡码一区二区久久| 国产无人区一区二区三区| 亚洲高清美女一区二区三区| 亚洲AV香蕉一区区二区三区| 人妻少妇精品视频三区二区一区 | 久久无码人妻精品一区二区三区 | 波多野结衣一区视频在线| 无码少妇一区二区三区| 国产福利一区二区三区在线视频| 亚洲一区免费在线观看| 高清一区二区三区视频| 无码少妇一区二区三区浪潮AV| 一区二区三区在线看| 国产福利一区二区在线视频 | 日本强伦姧人妻一区二区| 国产精品久久久久久一区二区三区| 亚洲一区二区三区免费视频| 精品国产一区二区三区无码| 亚洲美女视频一区二区三区| 国产精品夜色一区二区三区| 亚洲字幕AV一区二区三区四区| 精品欧洲av无码一区二区| 国精产品999一区二区三区有限| 国产成人一区二区三中文| 无码日韩精品一区二区免费| 成人H动漫精品一区二区| 一区二区三区在线观看中文字幕| 亚洲毛片不卡av在线播放一区| 在线观看国产一区| 中文字幕一区二区三区久久网站|