@whitesev/domutils 1.8.9 → 1.9.1

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/src/index.ts CHANGED
@@ -1578,6 +1578,40 @@ class DOMUtils extends ElementHandler {
1578
1578
  return parseHTMLByCreateDom();
1579
1579
  }
1580
1580
  }
1581
+ /**
1582
+ * 将字符串转为Element元素数组
1583
+ * @param html
1584
+ * @param useParser 是否使用DOMParser来生成元素,有些时候通过DOMParser生成的元素有点问题
1585
+ * + true 使用DOMPraser来转换字符串
1586
+ * + false (默认)创建一个div,里面放入字符串,然后提取childNodes
1587
+ * @example
1588
+ * // 将字符串转为Element元素数组
1589
+ * DOMUtils.toElements("<a href='xxxx'></a>")
1590
+ * > [<a href="xxxx"></a>]
1591
+ * @example
1592
+ * // 使用DOMParser将字符串转为Element元素数组
1593
+ * DOMUtils.toElements("<a href='xxxx'></a>",true)
1594
+ * > [<a href="xxxx"></a>]
1595
+ */
1596
+ toElements(html: string, useParser = false) {
1597
+ const that = this;
1598
+ // 去除html前后的空格
1599
+ html = html.trim();
1600
+ function parseHTMLByDOMParser() {
1601
+ const parser = new DOMParser();
1602
+ return Array.from(parser.parseFromString(html, "text/html").body.childNodes);
1603
+ }
1604
+ function parseHTMLByCreateDom() {
1605
+ const $el = that.windowApi.document.createElement("div");
1606
+ that.html($el, html);
1607
+ return Array.from($el.childNodes);
1608
+ }
1609
+ if (useParser) {
1610
+ return parseHTMLByDOMParser();
1611
+ } else {
1612
+ return parseHTMLByCreateDom();
1613
+ }
1614
+ }
1581
1615
  /**
1582
1616
  * 序列化表单元素
1583
1617
  * @param $form 表单元素
@@ -1586,29 +1620,32 @@ class DOMUtils extends ElementHandler {
1586
1620
  * > xxx=xxx&aaa=
1587
1621
  */
1588
1622
  serialize($form: HTMLFormElement): string {
1623
+ if (!($form instanceof HTMLFormElement)) {
1624
+ throw new TypeError("DOMUtils.serialize 参数必须是HTMLFormElement");
1625
+ }
1589
1626
  const elements = $form.elements;
1590
1627
  const serializedArray: { name: string; value: string }[] = [];
1591
1628
 
1592
- for (let i = 0; i < elements.length; i++) {
1593
- const element = elements[i] as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
1629
+ for (let index = 0; index < elements.length; index++) {
1630
+ const $el = elements[index] as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
1594
1631
 
1595
1632
  if (
1596
- element.name &&
1597
- !element.disabled &&
1598
- ((element as HTMLInputElement).checked ||
1599
- ["text", "hidden", "password", "textarea", "select-one", "select-multiple"].includes(element.type))
1633
+ $el.name &&
1634
+ !$el.disabled &&
1635
+ (($el as HTMLInputElement).checked ||
1636
+ ["text", "hidden", "password", "textarea", "select-one", "select-multiple"].includes($el.type))
1600
1637
  ) {
1601
- if (element.type === "select-multiple") {
1602
- for (let j = 0; j < (element as HTMLSelectElement).options.length; j++) {
1603
- if ((element as HTMLSelectElement).options[j].selected) {
1638
+ if ($el.type === "select-multiple") {
1639
+ for (let j = 0; j < ($el as HTMLSelectElement).options.length; j++) {
1640
+ if (($el as HTMLSelectElement).options[j].selected) {
1604
1641
  serializedArray.push({
1605
- name: (element as HTMLSelectElement).name,
1606
- value: (element as HTMLSelectElement).options[j].value,
1642
+ name: ($el as HTMLSelectElement).name,
1643
+ value: ($el as HTMLSelectElement).options[j].value,
1607
1644
  });
1608
1645
  }
1609
1646
  }
1610
1647
  } else {
1611
- serializedArray.push({ name: element.name, value: element.value });
1648
+ serializedArray.push({ name: $el.name, value: $el.value });
1612
1649
  }
1613
1650
  }
1614
1651
  }
@@ -339,9 +339,9 @@ export declare type DOMUtils_EventType = keyof DOMUtils_Event;
339
339
  */
340
340
  export declare interface DOMUtilsEventListenerOptionsAttribute {
341
341
  /**
342
- * DOMUtils的ownCallBack,元素上的监听事件就是它,移除事件时也需要传入这个函数
342
+ * DOMUtils的handlerCallBack,元素上的监听事件就是它,移除事件时也需要传入这个函数
343
343
  */
344
- callback: (event: Event) => void;
344
+ handlerCallBack: (event: Event, $selector?: HTMLElement) => void;
345
345
  /**
346
346
  * 属性配置
347
347
  */
@@ -349,7 +349,7 @@ export declare interface DOMUtilsEventListenerOptionsAttribute {
349
349
  /**
350
350
  * 用户添加的事件
351
351
  */
352
- originCallBack: (event: Event, selectorTarget?: HTMLElement) => void;
352
+ callback: (event: Event, $selector?: HTMLElement) => void;
353
353
  /**
354
354
  * 子元素选择器
355
355
  */
@@ -7,3 +7,4 @@ declare interface Window {
7
7
  DOMUtils: typeof import("./../index").DOMUtils;
8
8
  trustedTypes: any;
9
9
  }
10
+ declare type IArray<T> = T | T[];