获取url中的参数, 删除url中参数, 增长url中的参数

URL相关操做

关于更多公共类的操做方法,能够关注下小滑轮网站 http://www.feiaci.com/#/self/...dom

  1. 获取window.URL 实例
  2. 获取url中的参数
  3. 删除url中参数
  4. 增长url中的参数
  5. 获取URL里domain
  6. 返回url的pathName
  7. http协议转换为https
  8. 将dataURL转换为blob
  9. blob2DataURL
/**
 * 给定 url, 返回一个 window.URL 实例
 * @param url
 * @returns {*|URL}
 */
function parseUrl(url) {
    if (url.startsWith('//')) {
        url = location.protocol + url;
    }
    return new window.URL(url);
}

/**
 * 获取url中的参数
 * @param name 为参数名
 * @param url 为获取参数的URL
 */
function getUrlParam(name, url = window.location.href) {
    return parseUrl(url).searchParams.get(name);
}

/**
 * 删除url中参数
 * @param name 为参数名
 * @returns {String}
 */
function removeUrlParam(param, url = window.location.href) {
    let obj = parseUrl(url);
    obj.searchParams.delete(param);
    return obj.href;
}

/**
 * 增长url中的参数
 * @param key
 * @param value
 * @param url
 * @returns {String}
 */
function addUrlParam(key, value, url = window.location.href) {
    let obj = parseUrl(url);
    obj.searchParams.set(key, value);
    return obj.href;
}

/**
 * 获取URL里domain
 * 举例: url = "http://jira.yqxiu.cn/browse/REFACT-17"
 * 返回 "jira.yqxiu.cn"
 */
function getUrlHost(url = window.location.href) {
    return parseUrl(url).host;
}

/**
 * 返回url的pathName
 * @param url
 */
function getPathName(url = window.location.href) {
    var obj = parseUrl(url);
    return obj.pathname;
}

/**
* http协议转换为https
* @param url
* @return {*}
*/
function url2https(url) {
    return addProtocol(url).replace(/^http:/, 'https:');
}

/**
 * 将dataURL转换为blob
 * @param {*} dataURL
 */
function dataURL2Blob(dataURL) {
    const arr = dataURL.split(',')
    const type = arr[0].match(/:(.*?);/)[1]
    const text = window.atob(arr[1]) // 将base64转换成文本
    let n = text.length
    const uint8Array = new Uint8Array(n)
    while (n--) {
        uint8Array[n] = text.charCodeAt(n)
    }
    return new Blob([uint8Array], { type })
}

/**
 * 将blob转换为dataURL
 * @param {*} blob
 */
function blob2DataURL(blob) {
    return new Promise(resolve => {
        const fileReader = new FileReader()
        fileReader.onload = e => resolve(e.target.result)
        fileReader.readAsDataURL(blob)
    })
}