# etccb-utils

> 前端工具库

Latest version **2.1.10** (published 2020-04-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install etccb-utils
pnpm add etccb-utils
yarn add etccb-utils
bun add etccb-utils
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.10 |
| Published | 2020-04-13 |
| First published | 2019-06-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 298 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | yongqing |
| Maintainers | severho, yongqing |

## Links

- npm: https://www.npmjs.com/package/etccb-utils
- Repository: https://github.com/etc-ui/etccb-utils
- Homepage: https://github.com/etc-ui/etccb-utils#readme
- Issues: https://github.com/etc-ui/etccb-utils/issues
- npm.io page: https://npm.io/package/etccb-utils

## Dependencies (1)

- [@babel/runtime](https://npm.io/package/@babel/runtime.md) ^7.4.5

## Recent versions

- 2.1.10 (latest) — 2020-04-13
- 2.1.9 — 2020-04-13
- 2.1.8 — 2020-04-09
- 2.1.7 — 2020-03-20
- 2.1.6 — 2020-01-15
- 2.1.4 — 2020-01-10
- 2.1.3 — 2019-12-26
- 2.1.2 — 2019-12-26
- 2.1.1 — 2019-11-28
- 2.1.0 — 2019-11-21
- 2.0.9 — 2019-11-21
- 2.0.8 — 2019-11-06
- 2.0.7 — 2019-11-05
- 2.0.6 — 2019-10-22
- 2.0.5 — 2019-10-16
- … 18 more at https://npm.io/package/etccb-utils/versions

## README

# 简介
前端工具库

## 安装
### npm方式
```
   //两种方式
   npm install etccb-utils --save 
   或
   yarn add etccb-utils 
   
   
   //引入使用
   import etccb from "etccb-utils"
   或
   let etcb=require("etccb-utils").default

   let el=document.querySelector(".app")
   let flag=etccb.hasClass(el,'active')
   console.log(flag)
```

### CDN 方式
```
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div class="app active"></div>
</body>
<!--引入工具库-->
  <script src="https://unpkg.com/etccb-utils/dist/index.js"></script>
  <script>
    window.onload=function(){
      let etccb = etccb.default;
      let el=document.querySelector(".app")
      let flag=etccb.hasClass(el,'active')
      console.log(flag)
    }
  </script>
</html>
```

### 版本更新
- 2.0.0 （当前）
- 1.x.x中版本更新指令：npm install etccb-utils@^1.0.0 --save
- 1.0.x小版本更新指令：npm install etccb-utils@~1.0.0 --save


# <span id="contents">目录</span>
- polyfill
  - [String.prototype.padStart(targetLength \[, padString\])](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padStart)
- [etccb](#etccb)
  - [createUUID()](#createUUID)
  - [isGEVersion(target, source)](#isGEVersion)
  - [stopHistoryBack(resume)](#stopHistoryBack)
  - [getMonitorParams(eventId, eventType, extra)](#getMonitorParams)
  - [cmd](#cmd)
    - [closeWebView()](#closeWebView)
    - [goToApp(cmd, param)](#goToApp)
    - [goToAppStr(cmd_str)](#goToAppStr)
    - [openWithApp(url, title, isEncoding)](#openWithApp)
  - [cookie](#cookie)
    - [getCookie(name)](#getCookie)
    - [removeCookie(name)](#removeCookie)
    - [setCookie(name, value, time = 365, options)](#setCookie)
  - [date](#date)
    - [formatDate(date, formatStr)](#formatDate)
  - [dom](#dom)
    - [addClass(ele, cls)](#addClass)
    - [hasClass(ele, cls)](#hasClass)
    - [loadFile(url, type)](#loadFile)
    - [removeClass(ele, cls)](#removeClass)
  - [url](#url)
    - [getPostfix()](#getPostfix)
    - [queryHashString(key)](#queryHashString)
    - [queryString(key)](#queryString)
    - [setParam(url, key, value)](#setParam)
    - [setParams(url, data)](#setParams)
    - [getSLD()](#getSLD)
  - [ua](#ua)
    - [isAndroid()](#isAndroid)
    - [isChebao()](#isChebao)
    - [isIos()](#isIos)
    - [isIphoneX()](#isIphoneX)
    - [isWeixin()](#isWeixin)


# api 详细文档
## <span id="etccb">基础函数</span>
- ### <span id="createUUID">createUUID()</span>
> 生成36位UUID

2.0.0引入

##### 例子
```js
etccb.createUUID();// => 4e0b9c2b-b570-4e08-8411-28962e57094f
```

##### 返回
String

[返回目录>>](#contents)<br>

- ### <span id="isGEVersion">isGEVersion(target, source)</span>
> 判断当前版本是否大于等于目标版本，source >= target//true，GE = Greater Equal

1.0.0引入isEqualEqVersion<br>
2.0.0版本改名为isGEVersion


参数 | 类型 | 必填 | 说明
---|---|---|---
target | String | 是 | 目标版本
source | String | 否 |  要对比的版本，非必填，默认取URL或cookies的clientVersion 值


##### 例子
```js
etccb.isGEVersion("3.2.0");// => 当前版本是3.2.0以下为true
etccb.isGEVersion("3.2.0","1.0.0");// => false
etccb.isGEVersion("3.2.0","4.0.0");// => true
```


##### 返回
是否大于等于某版本，Boolean

[返回目录>>](#contents)<br>

- ### <span id="stopHistoryBack">stopHistoryBack(resume)</span>
> 阻止历史返回，主流浏览器通用

2.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
cb | Function/undefined | 否 | 回调函数，为空时可恢复（安卓需要恢复onpopstate函数，需要在退出当前页面之前调用）

##### 例子
```js
//阻止
etccb.stopHistoryBack(()=>{
  //do sth
});

//恢复
etccb.stopHistoryBack();
```

[返回目录>>](#contents)<br>
- ### <span id="getMonitorParams">getMonitorParams(eventId, eventType, extra)</span>
> 获取监听接口参数

2.0.9引入

参数 | 类型 | 必填 | 说明
---|---|---|---
eventId | String | 是 | 事件ID
eventType | Number | 否 | 事件类型：1：页面访问，2：行为事件，默认为1
extra | Json Object | 否 | 额外数据

##### 例子
```js
let params = getMonitorParams('Event_1');
let params = getMonitorParams('Event_2', 2);
let params = getMonitorParams('Event_2', 2, {text: '点击'});

//返回结果
{
    "model": "unknown",//设备（H5是unknown）
    "ds": "1125*2436",//屏幕长宽
    "loc": "",//定位（H5是空值）
    "event_type": 1,//事件类型：1：页面访问，2：行为事件
    "etcos": 2,//操作系统，1：安卓，2：IOS
    "version": "3.0.0",//优先获取链接的clientVersion，其次是cookie的clientVersion
    "token": "",//优先获取链接的token，其次是cookie的token
    "url": "",//当前URL
    "event_name": "Event_1",//事件ID
    "ua": "",//navigator.userAgent
    "distinct_id": "XXXXXXXX-XXXX",//APP内获取url或cookie的distinct_id，APP外自动生成UUID存入cookie中
    "nfc_type": "",//NFC类型（H5是空值）
    "source": 3,//来源，number，3：APP内部H5，4：APP外部H5
    "extra": "{text:'点击'}"
}
```

[返回目录>>](#contents)<br>


## <span id="CMD">CMD</span>
- ###  <span id="goToApp">goToApp(cmd,param)</span>
> 执行指令

1.0.0引入 

参数 | 类型 | 必填 | 说明
---|---|---|---
cmd | String | 是 | 指令名称(更多指令请参考wiki)<br/>如：openWithApp
param | JSON Object | 否 | 参数，默认-1<br/>如：{ url:'http://baidu.com',title:'ET前端',isEncoding:0 }


##### 例子
```js
etccb.cmd.goToApp("closeWebView");
// 或
etccb.cmd.goToApp("openWithApp",{
    url:'http://baidu.com',
    title:'百度',
    isEncoding:0
})
```

[返回目录>>](#contents)<br>

- ### <span id="goToAppStr">goToAppStr(cmd_str)</span>
> 执行指令（字符串模式）

2.0.0引入 

参数 | 类型 | 必填 | 说明
---|---|---|---
cmd_str | String | 是 | 字符串指令<br>格式1：jumpCmd==cmd:params<br>格式2：cmd:params


##### 例子
```js
etccb.cmd.goToAppStr("jumpCmd==openWithApp:title==='ET前端'");
etccb.cmd.goToAppStr("openWithApp:title==='ET前端'");
etccb.cmd.goToAppStr("closeWebView:-1");
```

[返回目录>>](#contents)<br>

- ###  <span id="openWithApp">openWithApp(url, title, isEncoding)</span> 
> 打开一个新的webview

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
url | String | 是 | 打开的页面地址
title | String | 否 | 打开页面的标题
isEncoding | Number | 否 | APP是否需要对“url”参数编码，1表示编码 0表示不编码<br>注：如果传1，url不会在H5进行编码


##### 例子
```js
etccb.cmd.openWithApp('http://etccbao.com',"ET前端");
//或
etccb.cmd.openWithApp('http://etccbao.com',"ET前端",1);
```
[返回目录>>](#contents)<br>

- ###  <span id="closeWebView">closeWebView()</span> 
> 关闭 webview

引入版本 1.0.0

##### 例子
```js
etccb.cmd.closeWebView();
```

[返回目录>>](#contents)<br>


---
## <span id="date">date</span>
- ### <span id="formatDate">formatDate(date,formatStr)</span> 
> 日期时间格式化

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
date | Date/timestamp/String | 是 | 需要传入时间<br>如：new Date()/1483326245000/'2019-06-28'
formatStr | String | 是 | 输出格式（请注意大小写）<br>如：yyyy-MM-dd 


#### 日期格式

格式 | 说明 | 备注 | 举例
---|---|---|---
yyyy | 年  |  | 2017
M |月| 不补0| 1
MM  |月 | 补0 | 01
W |周| 仅周选择器的 format 可用；不补0 | 1
WW | 周 |仅周选择器的 format 可用 | 01
d |日 | 不补0 |2
dd | 日 | 补0 |  02
H |小时 | 24小时制；不补0| 3
HH | 小时 | 24小时制 |03
h |小时|  12小时制，须和 A 或 a 使用；不补0 |3
hh | 小时 | 12小时制，须和 A 或 a 使用 |03
m| 分钟 | 不补0 |4
mm | 分钟 | 补0 |   04
s |秒| 不补0 |5
ss | 秒  | 补0 |05


##### 例子
```js
etccb.date.formatDate(new Date(),'yyyy-MM-dd');// => 2019-06-28
etccb.date.formatDate(new Date(),'yyyy-MM-dd hh:mm:ss');// => 2019-06-28 01:02:03
etccb.date.formatDate("2019-06-28",'yyyy-MM-dd');// => 2019-06-28
etccb.date.formatDate(1483326245000,'yyyy-MM-dd');// => 2019-06-28
```


##### 返回 
格式化后的时间格式 String

[返回目录>>](#contents)<br>

---


## <span id="dom">dom</span>
- ###  <span id="addClass">addClass(ele,cls)</span> 
> 给dom元素添加class

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
ele | Object | 是 | 需要处理dom对象
cls | String | 是 | 需要添加处理的class 类名


##### 例子
```js
let el=document.querySelector(".app");
etccb.dom.addClass(el,"my-class-name");
```

[返回目录>>](#contents)<br>

- ###  <span id="hasClass">hasClass(ele,cls)</span> 
> 判断dom元素是否有class

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
ele | Object | 是 | dom对象
cls | String | 是 | class类名


##### 例子
```js
let el=document.querySelector(".app");
etccb.dom.hasClass(el,"my-class-name");// => true/false
```

##### 返回
Boolean

[返回目录>>](#contents)<br>

- ### <span id="loadFile">loadFile(url, type)</span>
> 加载js或css

2.0.2引入

参数 | 类型 | 必填 | 说明
---|---|---|---
url | String | 是 | 链接
type | String | 否 | 加载类型，js/css，默认js

##### 例子
```js
etccb.loadFile('xxx.com/h5.js').then((readyState)=>{
  console.log(readyState);
});
etccb.loadFile('xxx.com/h5.js','js').then((readyState)=>{
  console.log(readyState);
});
etccb.loadFile('xxx.com/h5.css','css').then((readyState)=>{
  console.log(readyState);
});
```

##### 返回
Promise

[返回目录>>](#contents)<br>

- ### <span id="removeClass">removeClass(ele,cls)</span> 
> 移除dom元素的class

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
ele | Object | 是 | 需要处理dom对象
cls | String | 是 | 需要移除处理的class 类名

##### 例子
```js
let el=document.querySelector(".app");
etccb.dom.removeClass(el,"my-class-name");
```

[返回目录>>](#contents)<br>

---
## <span id="cookie">cookie</span>
- ### <span id="getCookie">getCookie(name)</span> 
> 获取cookie

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
name | String | 是 | cookie名称

##### 例子
```js
etccb.cookie.getCookie("token");// => 1a2b3c1d2e3f1a2b3c1d2e3f
```

##### 返回
token字符串，String

[返回目录>>](#contents)<br>

- ### <span id="setCookie">setCookie(name, value, time)</span> 
> 设置cookie

1.0.0引入<br>
2.0.0调整参数<br>
2.1.10 domain默认值为当前二级域名


参数 | 类型 | 必填 | 说明
---|---|---|---
name | String | 是 | cookie名称
value | String | 是 | cookie的值
time | Number | 否 | 过期天数 （默认365天）
options | JSON Object | 否 | 其他选项（**2.0.0**）<br>默认：{domain:【当前二级域名】,path:'/'}

##### 例子
```js
etccb.cookie.setCookie("token","123456xxx",3);
//2.0.0支持
etccb.cookie.setCookie("token","123456xxx",3, {domain:'xxx.cn',path:'/demo'});
```
[返回目录>>](#contents)<br>

- ### <span id="removeCookie">removeCookie(name)</span> 
> 移除cookie

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
name | String | 是 | 需要移除的cookie名称


##### 例子
```js
etccb.cookie.removeCookie("token");
```

[返回目录>>](#contents)<br>

---

## <span id="url">URL</span>
- ### <span id="getPostfix">getPostfix()</span>
> 截取当前host有没有后缀，如-dev 、-test等，1.0.0版本是getPrefix()

2.0.0引入

##### 例子
```js
console.log(etccb.url.getPostfix())// => '-test'
```

##### 返回 
host后缀，String，如-dev 、-test


[返回目录>>](#contents)<br>


- ### <span id="queryString">queryString(key,isDecode)</span> 
> 获取url 参数

1.0.0引入


参数 | 类型 | 必填 | 说明
---|---|---|---
key | String | 是 | url参数名称
isDecode | Boolean | 否 | 是否需要decode解码，默认false，也支持number类型，0不解码，1解码

##### 例子
```js
etccb.url.queryString("version");// => 3.0
etccb.url.queryString("backUrl");// => https%3A%2F%2Fwww.xxx.com
etccb.url.queryString("backUrl",1);// => https://www.xxx.com
```

##### 返回
url参数的值，String


[返回目录>>](#contents)<br>

- ### <span id="queryHashString">queryHashString(key)</span> 
> 获取url的hash参数

1.0.0引入

参数 | 类型 | 必填 | 说明
---|---|---|---
key | String | 是 | url的hash参数名称

##### 例子
```js
etccb.url.queryHashString("version");// => 3.0
```

##### 返回 
url的hash参数值，String

[返回目录>>](#contents)<br>


- ### <span id="setParam">setParam(url, key, value)</span>
> 设置url的参数

2.0.0引入


参数 | 类型 | 必填 | 说明
---|---|---|---
url | String | 是 | url字符串（不需要encode）
key | String | 是 | 参数名
value | String | 否 | 值，null/undefined(不填)不添加参数或删除当前参数，其他情况都会新增参数


##### 例子
```js
//新增
etccb.url.setParam("a.com","b","1");// => a.com?b=1  
etccb.url.setParam("a.com?c=1","b",false);// => a.com?c=1&b=false
etccb.url.setParam("a.com?c=1","b","2");// => a.com?c=1&b=2
etccb.url.setParam("a.com?c=1","b",0);// => a.com?c=1&b=0
etccb.url.setParam("a.com?c=1","b","");// => a.com?c=1&b=

//替换
etccb.url.setParam("a.com?b=1","b","2");// => a.com?b=2

//删除
etccb.url.setParam("a.com?b=1","b",null);// => a.com
etccb.url.setParam("a.com?b=1","b",undefined);// => a.com
etccb.url.setParam("a.com?b=1","b");// => a.com

//不添加
etccb.url.setParam("a.com?c=1","b",null);// => a.com?c=1
etccb.url.setParam("a.com?c=1","b",undefined);// => a.com?c=1
etccb.url.setParam("a.com?c=1","b");// => a.com?c=1

```


##### 返回
拼接后的url

[返回目录>>](#contents)<br>


- ### <span id="setParams">setParams(url, data)</span>
> 批量设置url的参数

2.0.0引入


参数 | 类型 | 必填 | 说明
---|---|---|---
url | String | 是 | url字符串（不需要encode）
data | Json Object | 是 | 值对象，仅支持只有一级的json


##### 例子
```js
etccb.url.setParams("a.com",{b:1,c:2});// => a.com?b=1&c=2，其他情况参考setParam函数
```


##### 返回
拼接后的url

[返回目录>>](#contents)<br>


- ### <span id="getSLD">getSLD()</span>

> 获取二级域名，SLD = Second-level domain

2.1.7引入

##### 例子
```js
//当前域名：localhost
etccb.url.getSLD();// => xxx 

//当前域名：127.0.0.1
etccb.url.getSLD();// => xxx 

//当前域名：vip.xxx.com
etccb.url.getSLD();// => xxx

//当前域名：vip-test.xxx.com
etccb.url.getSLD();// => xxx

//当前域名：api.card.xxx.com
etccb.url.getSLD();// => xxx
```


##### 返回
拼接后的url

[返回目录>>](#contents)<br>

---

## <span id="ua">user-agent 浏览器标识</span>
- ### <span id="isAndroid">isAndroid()</span>
> 是否为安卓浏览器环境

1.0.0引入

##### 例子
```js
etccb.ua.isAndroid();// => true/false
```

##### 返回 Boolean

[返回目录>>](#contents)<br>

- ### <span id="isChebao">isChebao()</span>
> 是否为车宝环境

1.0.0引入

##### 例子
```js
etccb.ua.isChebao();// => true/false
```

##### 返回 Boolean

[返回目录>>](#contents)<br>

- ### <span id="isIos">isIos()</span>
> 是否为IOS浏览器环境

1.0.0引入

##### 例子
```js
etccb.ua.isIos();// => true/false
```

##### 返回 Boolean

[返回目录>>](#contents)<br>

- ### <span id="isIphoneX">isIphoneX()</span>
> 是否为iphoneX 浏览器环境

1.0.0引入

##### 例子
```js
etccb.ua.isIphoneX()// => true/false
```


##### 返回 Boolean

[返回目录>>](#contents)<br>

- ### <span id="isWeixin">isWeixin()</span>
> 是否为微信浏览器环境

1.0.0引入

##### 例子
```js
etccb.ua.isWeixin()// => true/false
```

##### 返回 Boolean

[返回目录>>](#contents)<br>

---
_Source: https://npm.io/package/etccb-utils · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
