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