我有以下html代码,具有以纯文本格式下载内容的功能:
<div class="col-sm-7">
<ul class="nav nav-pills nav-justified">
<li role="presentation" class="active">
<a id="fileNameId" data-toggle="pill" href="#tab" style="font-weight:bold">Server Name
<button class="btn glyphicon glyphicon-download-alt text-primary tips pull-right" type="button" onclick="downloadFile('fileNameId', 'contentId')" data-placement="bottom" data-original-title="Download1" style="display:block"> </button>
</a>
</li>
</ul>
<div class="tab-content">
<div id="tab" class="tab-pane fade in active">
<pre id="contentId">Some text to download</pre>
</div>
</div>
<script>
function downloadFile(fileNameId, contentId) {
var element = document.createElement('a');
var content = document.getElementById(contentId).innerText.replace(/\r?\n/g, "\r\n");
var fileName = document.getElementById(fileNameId).innerText.trim();
console.log(document.getElementById(fileNameId).innerText);
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content));
element.setAttribute('download', fileName+'.txt');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
console.log(element);
document.body.removeChild(element);
}
</script>
注意:
contentId
是一个pre
元素,我需要下载其文本,fileNameId
的innerText会动态更改,以便下载的文件名也会相应更改。
现在,问题是JS中的fileName
变量包含额外的文本 - “Download1”,它恰好是按钮的data-original-title
属性的值。这可以在console.log的o / p中看到:
Server Name
Download1
因此,下载的文件名变为 - Server Name -Download1.txt
这是预期的行为吗?当我所做的只是data-original-title
时,document.getElementById(fileNameId).innerText
的值是如何从JS传递的?
答案 0 :(得分:0)
您需要在按钮
之前关闭锚标记 <li role="presentation" class="active">
<a id="fileNameId" data-toggle="pill" href="#tab" style="font-weight:bold">Server Name
</a>
<button class="btn glyphicon glyphicon-download-alt text-primary tips pull-right" type="button" onclick="downloadFile('fileNameId', 'contentId')" data-placement="bottom" data-original-title="Download1" style="display:block"> </button>
</li>