這段代碼是一個 JavaScript/jQuery 函數,主要實現的功能是在頁面加載完成後,當用戶點擊 <pre> 元素時,將其文本內容以指定的文件類型下載到本地。
具體代碼解析如下:
- 首先使用
$(document).ready()方法,確保代碼在文檔加載完成後執行。 - 使用
$()函數選擇器選取所有<pre>元素,並且使用.click()方法爲其綁定點擊事件處理程序。 - 當用戶點擊
<pre>元素時,觸發點擊事件處理程序。 - 在點擊事件處理程序中,首先使用
$(this).text()獲取當前點擊的<pre>元素的文本內容,並賦值給變量content。 - 接着使用
$(this).attr('data-filename')獲取當前點擊的<pre>元素的data-filename屬性值,並賦值給變量fileName。該屬性用於指定下載文件的名稱。 - 調用名爲
downloadFile的函數,傳入content、text/plain和fileName作爲參數。 downloadFile函數定義在外層函數內部,接受三個參數:content(文件內容)、contentType(文件類型)和fileName(文件名稱)。- 在
downloadFile函數中,使用new Blob()創建一個 Blob 對象,其內容爲content,類型爲contentType。 - 創建一個
<a>元素,並設置其href屬性爲window.URL.createObjectURL(blob),這將爲 Blob 對象生成一個臨時的 URL。 - 設置
<a>元素的download屬性爲fileName,表示下載文件的名稱。 - 將
<a>元素的樣式設置爲display: none;,即隱藏該元素。 - 將
<a>元素添加到文檔的<body>元素中。 - 調用
.click()方法模擬用戶點擊<a>元素,實現文件下載。 - 執行完文件下載後,使用
document.body.removeChild(link)將<a>元素從文檔中移除。
總體來說,這段代碼實現了一個簡單的文件下載功能,點擊頁面上的 <pre> 元素時,會自動以指定的文件類型將其內容下載到本地,文件名由 data-filename 屬性指定。
代碼:
$(document).ready(function() {
$('pre').click(function() {
var content = $(this).text();
var fileName = $(this).attr('data-filename');
downloadFile(content, 'text/plain', fileName);
});
function downloadFile(content, contentType, fileName) {
var blob = new Blob([content], {type: contentType});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
});第二個版本:
雙擊後,彈窗是否下載,點擊下載則下載!
$(document).ready(function() {
$('pre').dblclick(function() {
var content = $(this).text();
var fileName = $(this).attr('data-filename');
showDownloadConfirmation(content, 'text/plain', fileName);
});
function showDownloadConfirmation(content, contentType, fileName) {
if (confirm("是否下載該文件?")) {
downloadFile(content, contentType, fileName);
}
}
function downloadFile(content, contentType, fileName) {
var blob = new Blob([content], {type: contentType});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
});