@whitesev/domutils 1.7.0 → 1.7.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 CHANGED
@@ -523,7 +523,7 @@ define((function () { 'use strict';
523
523
  },
524
524
  };
525
525
 
526
- const version = "1.7.0";
526
+ const version = "1.7.2";
527
527
 
528
528
  /* 数据 */
529
529
  const GlobalData = {
@@ -1673,28 +1673,30 @@ define((function () { 'use strict';
1673
1673
  element = that.selectorAll(element);
1674
1674
  }
1675
1675
  if (element == null) {
1676
- return;
1676
+ return {
1677
+ off() { },
1678
+ trigger() { },
1679
+ };
1677
1680
  }
1678
- let elementList = [];
1681
+ let $elList = [];
1679
1682
  if (element instanceof NodeList || Array.isArray(element)) {
1680
- element = element;
1681
- elementList = [...element];
1683
+ $elList = $elList.concat(Array.from(element));
1682
1684
  }
1683
1685
  else {
1684
- elementList.push(element);
1686
+ $elList.push(element);
1685
1687
  }
1686
1688
  // 事件名
1687
1689
  let eventTypeList = [];
1688
1690
  if (Array.isArray(eventType)) {
1689
- eventTypeList = eventTypeList.concat(eventType.filter((eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""));
1691
+ eventTypeList = eventTypeList.concat(eventType.filter((it) => typeof it === "string" && it.toString() !== ""));
1690
1692
  }
1691
1693
  else if (typeof eventType === "string") {
1692
- eventTypeList = eventTypeList.concat(eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== ""));
1694
+ eventTypeList = eventTypeList.concat(eventType.split(" ").filter((it) => it !== ""));
1693
1695
  }
1694
1696
  // 子元素选择器
1695
1697
  let selectorList = [];
1696
1698
  if (Array.isArray(selector)) {
1697
- selectorList = selectorList.concat(selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== ""));
1699
+ selectorList = selectorList.concat(selector.filter((it) => typeof it === "string" && it.toString() !== ""));
1698
1700
  }
1699
1701
  else if (typeof selector === "string") {
1700
1702
  selectorList.push(selector);
@@ -1726,7 +1728,7 @@ define((function () { 'use strict';
1726
1728
  that.off(element, eventType, selector, callback, option);
1727
1729
  }
1728
1730
  }
1729
- elementList.forEach((elementItem) => {
1731
+ $elList.forEach((elementItem) => {
1730
1732
  /**
1731
1733
  * 事件回调
1732
1734
  * @param event
@@ -1752,7 +1754,7 @@ define((function () { 'use strict';
1752
1754
  }
1753
1755
  /* 在上层与主元素之间寻找可以被selector所匹配到的 */
1754
1756
  const $closestMatches = that.closest(eventTarget, selectorItem);
1755
- if ($closestMatches && totalParent?.contains($closestMatches)) {
1757
+ if ($closestMatches && totalParent?.contains?.($closestMatches)) {
1756
1758
  eventTarget = $closestMatches;
1757
1759
  return true;
1758
1760
  }
@@ -1797,6 +1799,23 @@ define((function () { 'use strict';
1797
1799
  Reflect.set(elementItem, GlobalData.domEventSymbol, elementEvents);
1798
1800
  });
1799
1801
  });
1802
+ return {
1803
+ /**
1804
+ * 取消绑定的监听事件
1805
+ * @param filter (可选)过滤函数,对元素属性上的事件进行过滤出想要删除的事件
1806
+ */
1807
+ off: (filter) => {
1808
+ that.off($elList, eventTypeList, selectorList, listenerCallBack, listenerOption, filter);
1809
+ },
1810
+ /**
1811
+ * 主动触发事件
1812
+ * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
1813
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
1814
+ */
1815
+ trigger: (details, useDispatchToTriggerEvent) => {
1816
+ that.trigger($elList, eventTypeList, details, useDispatchToTriggerEvent);
1817
+ },
1818
+ };
1800
1819
  }
1801
1820
  off(element, eventType, selector, callback, option, filter) {
1802
1821
  /**
@@ -1827,22 +1846,22 @@ define((function () { 'use strict';
1827
1846
  let $elList = [];
1828
1847
  if (element instanceof NodeList || Array.isArray(element)) {
1829
1848
  element = element;
1830
- $elList = [...element];
1849
+ $elList = $elList.concat(Array.from(element));
1831
1850
  }
1832
1851
  else {
1833
1852
  $elList.push(element);
1834
1853
  }
1835
1854
  let eventTypeList = [];
1836
1855
  if (Array.isArray(eventType)) {
1837
- eventTypeList = eventTypeList.concat(eventType.filter((eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""));
1856
+ eventTypeList = eventTypeList.concat(eventType.filter((it) => typeof it === "string" && it.toString() !== ""));
1838
1857
  }
1839
1858
  else if (typeof eventType === "string") {
1840
- eventTypeList = eventTypeList.concat(eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== ""));
1859
+ eventTypeList = eventTypeList.concat(eventType.split(" ").filter((it) => it !== ""));
1841
1860
  }
1842
1861
  // 子元素选择器
1843
1862
  let selectorList = [];
1844
1863
  if (Array.isArray(selector)) {
1845
- selectorList = selectorList.concat(selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== ""));
1864
+ selectorList = selectorList.concat(selector.filter((it) => typeof it === "string" && it.toString() !== ""));
1846
1865
  }
1847
1866
  else if (typeof selector === "string") {
1848
1867
  selectorList.push(selector);
@@ -1937,7 +1956,7 @@ define((function () { 'use strict';
1937
1956
  }
1938
1957
  let $elList = [];
1939
1958
  if (element instanceof NodeList || Array.isArray(element)) {
1940
- $elList = [...element];
1959
+ $elList = $elList.concat(Array.from(element));
1941
1960
  }
1942
1961
  else {
1943
1962
  $elList.push(element);
@@ -2043,7 +2062,7 @@ define((function () { 'use strict';
2043
2062
  }
2044
2063
  if (checkDOMReadyState()) {
2045
2064
  /* 检查document状态 */
2046
- CommonUtils.setTimeout(callback);
2065
+ CommonUtils.setTimeout(callback, 0);
2047
2066
  }
2048
2067
  else {
2049
2068
  /* 添加监听 */
@@ -2055,7 +2074,7 @@ define((function () { 'use strict';
2055
2074
  * @param element 需要触发的元素|元素数组|window
2056
2075
  * @param eventType 需要触发的事件
2057
2076
  * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
2058
- * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true
2077
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
2059
2078
  * @example
2060
2079
  * // 触发元素a.xx的click事件
2061
2080
  * DOMUtils.trigger(document.querySelector("a.xx"),"click")
@@ -2074,15 +2093,14 @@ define((function () { 'use strict';
2074
2093
  }
2075
2094
  let $elList = [];
2076
2095
  if (element instanceof NodeList || Array.isArray(element)) {
2077
- element = element;
2078
- $elList = [...element];
2096
+ $elList = $elList.concat(Array.from(element));
2079
2097
  }
2080
2098
  else {
2081
- $elList = [element];
2099
+ $elList.push(element);
2082
2100
  }
2083
2101
  let eventTypeList = [];
2084
2102
  if (Array.isArray(eventType)) {
2085
- eventTypeList = eventType;
2103
+ eventTypeList = eventType.filter((it) => typeof it === "string" && it.trim() !== "");
2086
2104
  }
2087
2105
  else if (typeof eventType === "string") {
2088
2106
  eventTypeList = eventType.split(" ");
@@ -2090,25 +2108,26 @@ define((function () { 'use strict';
2090
2108
  $elList.forEach(($elItem) => {
2091
2109
  /* 获取对象上的事件 */
2092
2110
  const elementEvents = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
2093
- eventTypeList.forEach((__eventType) => {
2111
+ eventTypeList.forEach((eventTypeItem) => {
2094
2112
  let event = null;
2095
2113
  if (details && details instanceof Event) {
2096
2114
  event = details;
2097
2115
  }
2098
2116
  else {
2099
2117
  // 构造事件
2100
- event = new Event(__eventType);
2118
+ event = new Event(eventTypeItem);
2101
2119
  if (details) {
2102
- Object.keys(details).forEach((keyName) => {
2120
+ const detailKeys = Object.keys(details);
2121
+ detailKeys.forEach((keyName) => {
2103
2122
  const value = Reflect.get(details, keyName);
2104
2123
  // 在event上添加属性
2105
2124
  Reflect.set(event, keyName, value);
2106
2125
  });
2107
2126
  }
2108
2127
  }
2109
- if (useDispatchToTriggerEvent == false && __eventType in elementEvents) {
2128
+ if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
2110
2129
  // 直接调用监听的事件
2111
- elementEvents[__eventType].forEach((eventsItem) => {
2130
+ elementEvents[eventTypeItem].forEach((eventsItem) => {
2112
2131
  eventsItem.callback(event);
2113
2132
  });
2114
2133
  }