@whitesev/domutils 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.amd.js +130 -88
- package/dist/index.amd.js.map +1 -1
- package/dist/index.amd.min.js +1 -1
- package/dist/index.amd.min.js.map +1 -1
- package/dist/index.cjs.js +130 -88
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +130 -88
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.iife.js +130 -88
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +1 -1
- package/dist/index.iife.min.js.map +1 -1
- package/dist/index.system.js +130 -88
- package/dist/index.system.js.map +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/dist/index.umd.js +130 -88
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/src/ElementEvent.d.ts +8 -8
- package/dist/types/src/index.d.ts +20 -4
- package/package.json +1 -1
- package/src/ElementEvent.ts +106 -82
- package/src/index.ts +82 -20
package/dist/index.umd.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMUtils = factory());
|
|
5
5
|
})(this, (function () { 'use strict';
|
|
6
6
|
|
|
7
|
-
const version = "1.9.
|
|
7
|
+
const version = "1.9.2";
|
|
8
8
|
|
|
9
9
|
class WindowApi {
|
|
10
10
|
/** 默认的配置 */
|
|
@@ -1710,7 +1710,7 @@
|
|
|
1710
1710
|
}
|
|
1711
1711
|
for (const handler of handlers) {
|
|
1712
1712
|
$elItem.removeEventListener(eventName, handler.handlerCallBack, {
|
|
1713
|
-
capture: handler
|
|
1713
|
+
capture: handler.option.capture,
|
|
1714
1714
|
});
|
|
1715
1715
|
}
|
|
1716
1716
|
const events = Reflect.get($elItem, symbolItem);
|
|
@@ -1724,36 +1724,6 @@
|
|
|
1724
1724
|
// 异步回调
|
|
1725
1725
|
let resolve = void 0;
|
|
1726
1726
|
const that = this;
|
|
1727
|
-
/**
|
|
1728
|
-
* 检测文档是否加载完毕
|
|
1729
|
-
*/
|
|
1730
|
-
function checkDOMReadyState() {
|
|
1731
|
-
try {
|
|
1732
|
-
if (that.windowApi.document.readyState === "complete" ||
|
|
1733
|
-
(that.windowApi.document.readyState !== "loading" &&
|
|
1734
|
-
!that.windowApi.document.documentElement.doScroll)) {
|
|
1735
|
-
return true;
|
|
1736
|
-
}
|
|
1737
|
-
else {
|
|
1738
|
-
return false;
|
|
1739
|
-
}
|
|
1740
|
-
}
|
|
1741
|
-
catch {
|
|
1742
|
-
return false;
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
/**
|
|
1746
|
-
* 成功加载完毕后触发的回调函数
|
|
1747
|
-
*/
|
|
1748
|
-
function completed() {
|
|
1749
|
-
removeDomReadyListener();
|
|
1750
|
-
if (typeof callback === "function") {
|
|
1751
|
-
callback();
|
|
1752
|
-
}
|
|
1753
|
-
if (typeof resolve === "function") {
|
|
1754
|
-
resolve();
|
|
1755
|
-
}
|
|
1756
|
-
}
|
|
1757
1727
|
/**
|
|
1758
1728
|
* 监听目标
|
|
1759
1729
|
*/
|
|
@@ -1761,52 +1731,90 @@
|
|
|
1761
1731
|
{
|
|
1762
1732
|
target: that.windowApi.document,
|
|
1763
1733
|
eventType: "DOMContentLoaded",
|
|
1764
|
-
callback:
|
|
1734
|
+
callback: () => {
|
|
1735
|
+
ReadyChecker.completed();
|
|
1736
|
+
},
|
|
1765
1737
|
},
|
|
1766
1738
|
{
|
|
1767
1739
|
target: that.windowApi.window,
|
|
1768
1740
|
eventType: "load",
|
|
1769
|
-
callback:
|
|
1741
|
+
callback: () => {
|
|
1742
|
+
ReadyChecker.completed();
|
|
1743
|
+
},
|
|
1770
1744
|
},
|
|
1771
1745
|
];
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
}
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1746
|
+
const ReadyChecker = {
|
|
1747
|
+
init() {
|
|
1748
|
+
if (args.length === 0) {
|
|
1749
|
+
return new Promise((__resolve__) => {
|
|
1750
|
+
resolve = __resolve__;
|
|
1751
|
+
ReadyChecker.check();
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
else {
|
|
1755
|
+
ReadyChecker.check();
|
|
1756
|
+
}
|
|
1757
|
+
},
|
|
1758
|
+
check() {
|
|
1759
|
+
if (ReadyChecker.isReady()) {
|
|
1760
|
+
/* 检查document状态 */
|
|
1761
|
+
setTimeout(() => {
|
|
1762
|
+
ReadyChecker.completed();
|
|
1763
|
+
}, 0);
|
|
1764
|
+
}
|
|
1765
|
+
else {
|
|
1766
|
+
/* 添加监听 */
|
|
1767
|
+
ReadyChecker.onCompleted();
|
|
1768
|
+
}
|
|
1769
|
+
},
|
|
1770
|
+
/**
|
|
1771
|
+
* 检测文档是否加载完毕
|
|
1772
|
+
*/
|
|
1773
|
+
isReady() {
|
|
1774
|
+
try {
|
|
1775
|
+
if (that.windowApi.document.readyState === "complete" ||
|
|
1776
|
+
// @ts-expect-error
|
|
1777
|
+
(that.windowApi.document.readyState !== "loading" && !that.windowApi.document.documentElement.doScroll)) {
|
|
1778
|
+
return true;
|
|
1779
|
+
}
|
|
1780
|
+
else {
|
|
1781
|
+
return false;
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
catch {
|
|
1785
|
+
return false;
|
|
1786
|
+
}
|
|
1787
|
+
},
|
|
1788
|
+
/**
|
|
1789
|
+
* 成功加载完毕后触发的回调函数
|
|
1790
|
+
*/
|
|
1791
|
+
completed() {
|
|
1792
|
+
ReadyChecker.offCompleted();
|
|
1793
|
+
if (typeof callback === "function") {
|
|
1794
|
+
callback();
|
|
1795
|
+
}
|
|
1796
|
+
if (typeof resolve === "function") {
|
|
1797
|
+
resolve();
|
|
1798
|
+
}
|
|
1799
|
+
},
|
|
1800
|
+
/**
|
|
1801
|
+
* 添加监听
|
|
1802
|
+
*/
|
|
1803
|
+
onCompleted() {
|
|
1804
|
+
for (const item of listenTargetList) {
|
|
1805
|
+
that.on(item.target, item.eventType, item.callback);
|
|
1806
|
+
}
|
|
1807
|
+
},
|
|
1808
|
+
/**
|
|
1809
|
+
* 移除监听
|
|
1810
|
+
*/
|
|
1811
|
+
offCompleted() {
|
|
1812
|
+
for (const item of listenTargetList) {
|
|
1813
|
+
that.off(item.target, item.eventType, item.callback);
|
|
1814
|
+
}
|
|
1815
|
+
},
|
|
1816
|
+
};
|
|
1817
|
+
return ReadyChecker.init();
|
|
1810
1818
|
}
|
|
1811
1819
|
/**
|
|
1812
1820
|
* 主动触发事件
|
|
@@ -3581,6 +3589,41 @@
|
|
|
3581
3589
|
return parseHTMLByCreateDom();
|
|
3582
3590
|
}
|
|
3583
3591
|
}
|
|
3592
|
+
/**
|
|
3593
|
+
* 将字符串转为Element元素数组
|
|
3594
|
+
* @param html
|
|
3595
|
+
* @param useParser 是否使用DOMParser来生成元素,有些时候通过DOMParser生成的元素有点问题
|
|
3596
|
+
* + true 使用DOMPraser来转换字符串
|
|
3597
|
+
* + false (默认)创建一个div,里面放入字符串,然后提取childNodes
|
|
3598
|
+
* @example
|
|
3599
|
+
* // 将字符串转为Element元素数组
|
|
3600
|
+
* DOMUtils.toElements("<a href='xxxx'></a>")
|
|
3601
|
+
* > [<a href="xxxx"></a>]
|
|
3602
|
+
* @example
|
|
3603
|
+
* // 使用DOMParser将字符串转为Element元素数组
|
|
3604
|
+
* DOMUtils.toElements("<a href='xxxx'></a>",true)
|
|
3605
|
+
* > [<a href="xxxx"></a>]
|
|
3606
|
+
*/
|
|
3607
|
+
toElements(html, useParser = false) {
|
|
3608
|
+
const that = this;
|
|
3609
|
+
// 去除html前后的空格
|
|
3610
|
+
html = html.trim();
|
|
3611
|
+
function parseHTMLByDOMParser() {
|
|
3612
|
+
const parser = new DOMParser();
|
|
3613
|
+
return Array.from(parser.parseFromString(html, "text/html").body.childNodes);
|
|
3614
|
+
}
|
|
3615
|
+
function parseHTMLByCreateDom() {
|
|
3616
|
+
const $el = that.windowApi.document.createElement("div");
|
|
3617
|
+
that.html($el, html);
|
|
3618
|
+
return Array.from($el.childNodes);
|
|
3619
|
+
}
|
|
3620
|
+
if (useParser) {
|
|
3621
|
+
return parseHTMLByDOMParser();
|
|
3622
|
+
}
|
|
3623
|
+
else {
|
|
3624
|
+
return parseHTMLByCreateDom();
|
|
3625
|
+
}
|
|
3626
|
+
}
|
|
3584
3627
|
/**
|
|
3585
3628
|
* 序列化表单元素
|
|
3586
3629
|
* @param $form 表单元素
|
|
@@ -3589,26 +3632,29 @@
|
|
|
3589
3632
|
* > xxx=xxx&aaa=
|
|
3590
3633
|
*/
|
|
3591
3634
|
serialize($form) {
|
|
3635
|
+
if (!($form instanceof HTMLFormElement)) {
|
|
3636
|
+
throw new TypeError("DOMUtils.serialize 参数必须是HTMLFormElement");
|
|
3637
|
+
}
|
|
3592
3638
|
const elements = $form.elements;
|
|
3593
3639
|
const serializedArray = [];
|
|
3594
|
-
for (let
|
|
3595
|
-
const
|
|
3596
|
-
if (
|
|
3597
|
-
|
|
3598
|
-
(
|
|
3599
|
-
["text", "hidden", "password", "textarea", "select-one", "select-multiple"].includes(
|
|
3600
|
-
if (
|
|
3601
|
-
for (let j = 0; j <
|
|
3602
|
-
if (
|
|
3640
|
+
for (let index = 0; index < elements.length; index++) {
|
|
3641
|
+
const $el = elements[index];
|
|
3642
|
+
if ($el.name &&
|
|
3643
|
+
!$el.disabled &&
|
|
3644
|
+
($el.checked ||
|
|
3645
|
+
["text", "hidden", "password", "textarea", "select-one", "select-multiple"].includes($el.type))) {
|
|
3646
|
+
if ($el.type === "select-multiple") {
|
|
3647
|
+
for (let j = 0; j < $el.options.length; j++) {
|
|
3648
|
+
if ($el.options[j].selected) {
|
|
3603
3649
|
serializedArray.push({
|
|
3604
|
-
name:
|
|
3605
|
-
value:
|
|
3650
|
+
name: $el.name,
|
|
3651
|
+
value: $el.options[j].value,
|
|
3606
3652
|
});
|
|
3607
3653
|
}
|
|
3608
3654
|
}
|
|
3609
3655
|
}
|
|
3610
3656
|
else {
|
|
3611
|
-
serializedArray.push({ name:
|
|
3657
|
+
serializedArray.push({ name: $el.name, value: $el.value });
|
|
3612
3658
|
}
|
|
3613
3659
|
}
|
|
3614
3660
|
}
|
|
@@ -3924,10 +3970,6 @@
|
|
|
3924
3970
|
}
|
|
3925
3971
|
}
|
|
3926
3972
|
const domUtils = new DOMUtils();
|
|
3927
|
-
domUtils.emit(document, "test");
|
|
3928
|
-
domUtils.emit(document, "click");
|
|
3929
|
-
domUtils.emit(document, ["test", "click"]);
|
|
3930
|
-
domUtils.emit(document, ["test", "click"], true);
|
|
3931
3973
|
|
|
3932
3974
|
return domUtils;
|
|
3933
3975
|
|