mingyun / mingyun.github.io

github主页
159 stars 93 forks source link

使用JS把文本内容作为html文件下载 #85

Open mingyun opened 7 years ago

mingyun commented 7 years ago
//http://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-file/
var eleTextarea = document.querySelector('textarea');
var eleButton = document.querySelector('input[type="button"]');

// 下载文件方法
var funDownload = function (content, filename) {
    var eleLink = document.createElement('a');
    eleLink.download = filename;
    eleLink.style.display = 'none';
    // 字符内容转变成blob地址
    var blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    // 然后移除
    document.body.removeChild(eleLink);
};

if ('download' in document.createElement('a')) {
    // 作为test.html文件下载
    eleButton.addEventListener('click', function () {
        funDownload(eleTextarea.value, 'test.html');    
    });
} else {
    eleButton.onclick = function () {
        alert('浏览器不支持');    
    };
}
mingyun commented 7 years ago

浮点数精度之谜

/**
 * [scaleNum 通过操作其字符串将一个浮点数放大或缩小]
 * @param  {number} num      要放缩的浮点数
 * @param  {number} pos      小数点移动位数
 * pos大于0为放大,小于0为缩小;不传则默认将其变成整数
 * @return {number}          放缩后的数
 */
function scaleNum(num, pos) {
    if (num === 0 || pos === 0) {
        return num;
    }

    let parts = num.toString().split('.');
    const intLen = parts[0].length;
    const decimalLen = parts[1] ? parts[1].length : 0;

    // 默认将其变成整数,放大倍数为原来小数位数
    if (pos === undefined) {
        return parseFloat(parts[0] + parts[1]);
    } else if (pos > 0) {
        // 放大
        let zeros = pos - decimalLen;
        while (zeros > 0) {
            zeros -= 1;
            parts.push(0);
        }
    } else {
        // 缩小
        let zeros = Math.abs(pos) - intLen;
        while (zeros > 0) {
            zeros -= 1;
            parts.unshift(0);
        }
    }

    const idx = intLen + pos;
    parts = parts.join('').split('');
    parts.splice(idx > 0 ? idx : 0, 0, '.');

    return parseFloat(parts.join(''));
}
lucky1945 commented 3 years ago

111