@joyzl/eno 1.0.2 → 1.1.0

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.
Files changed (2) hide show
  1. package/index.js +347 -307
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,15 +1,13 @@
1
1
  // HTML5 Node Element
2
2
  // Easy Node Object
3
- // 提供HTML标签与数据对象之间的互操作支持。
3
+ // 提供HTML标签元素处理与数据对象之间的互操作支持。
4
4
 
5
5
  export default {
6
6
  create,
7
- remove,
8
-
7
+ append,
8
+ replace,
9
9
  select,
10
- selects,
11
- query,
12
- on,
10
+ remove,
13
11
 
14
12
  show,
15
13
  hide,
@@ -17,362 +15,305 @@ export default {
17
15
 
18
16
  gets,
19
17
  sets,
18
+
19
+ bind,
20
20
  entity,
21
21
  action,
22
22
  element,
23
+
24
+ query
23
25
  }
24
26
 
27
+ // 这个临时标签用于解析HTML字符串
28
+ const TEMP = document.createElement("div");
29
+
25
30
  /**
26
- * 显示单个/多个元素
27
- * @param {Element} element
31
+ * HTML字符串创建标签元素实例
32
+ * @param {String} html HTML字符串
33
+ * @return {Element} 创建的单个/多个标签元素
28
34
  */
29
- function show(element) {
30
- if (element) {
31
- if (element.trim) {
32
- show(selects(element));
33
- } else
34
- if (element.length) {
35
- for (let i = 0; i < element.length; i++) {
36
- show(element[i]);
37
- }
38
- } else
39
- if (element.nodeType) {
40
- element.hidden = false;
41
- }
35
+ function create(html) {
36
+ // 创建元素
37
+ TEMP.innerHTML = html;
38
+ let element;
39
+ if (TEMP.childElementCount == 1) {
40
+ element = TEMP.children[0];
41
+ element.remove();
42
+ } else
43
+ if (TEMP.childElementCount > 1) {
44
+ element = new Array();
45
+ do {
46
+ element.push(TEMP.children[0]);
47
+ TEMP.children[0].remove();
48
+ } while (TEMP.childElementCount > 0);
42
49
  }
50
+ return element;
51
+
52
+ // DocumentFragment
43
53
  }
44
54
 
45
55
  /**
46
- * 隐藏单个/多个元素
47
- * @param {Element} element
56
+ * 创建并添加标签元素
57
+ * @param {Element} element 标签元素
58
+ * @param {String} html HTML字符串
59
+ * @return {Element} 创建的单个/多个标签元素
48
60
  */
49
- function hide(element) {
50
- if (element) {
51
- if (element.trim) {
52
- hide(selects(element));
53
- } else
54
- if (element.length) {
55
- for (let i = 0; i < element.length; i++) {
56
- hide(element[i]);
57
- }
58
- } else
59
- if (element.nodeType) {
60
- element.hidden = true;
61
+ function append(element, html) {
62
+ if (arguments.length == 1) {
63
+ // append(html);
64
+ element = document.body;
65
+ } else
66
+ if (arguments.length == 2) {
67
+ // append(element,html);
68
+ element = select(element);
69
+ } else {
70
+ return;
71
+ }
72
+ if (html.trim) {
73
+ html = create(html);
74
+ }
75
+ if (html.length) {
76
+ for (let i = 0; i < html.length; i++) {
77
+ element.appendChild(html[i]);
61
78
  }
79
+ } else {
80
+ element.appendChild(html);
62
81
  }
82
+ return html;
63
83
  }
64
84
 
65
85
  /**
66
- * 切换指定元素显示,其余元素隐藏;
67
- * 如果指定样式类名,则当前原始添加样式类,其余元素移除样式类
68
- * @param {Element} parent 父级
69
- * @param {Element} element 当前元素
70
- * @param {String} className 类名称
86
+ * 创建并替换为标签元素
87
+ * @param {Element} element 标签元素
88
+ * @param {String} html HTML字符串
89
+ * @return {Element} 创建的单个/多个标签元素
71
90
  */
72
- function toggle(parent, element, className) {
73
- if (parent && parent.trim) {
74
- parent = select(parent);
91
+ function replace(element, html) {
92
+ if (arguments.length == 2) {
93
+ element = select(element);
94
+ } else {
95
+ return;
75
96
  }
76
- if (element && element.trim) {
77
- element = select(parent, element);
78
-
79
- if (element.parentElement != parent) {
80
- parent.appendChild(element);
81
- }
97
+ if (html.trim) {
98
+ html = create(html);
82
99
  }
83
-
84
- if (arguments.length == 1) {
85
- // toggle(element);
86
- if (parent.hidden) {
87
- parent.hidden = false;
100
+ if (element.parentElement) {
101
+ if (html.length) {
102
+ let item;
103
+ for (let i = 0; i < html.length; i++) {
104
+ item = html[i];
105
+ if (element.className) {
106
+ item.className += element.className;
107
+ }
108
+ if (element.style.cssText) {
109
+ item.style.cssText += element.style.cssText;
110
+ }
111
+ }
112
+ element.replaceWith(html);
88
113
  } else {
89
- parent.hidden = true;
90
- }
91
- } else
92
- if (arguments.length == 2) {
93
- // toggle(parent,element);
94
- // display:flex 导致 hidden 属性失效而不会隐藏
95
- for (let i = 0; i < parent.children.length; i++) {
96
- if (element == parent.children[i]) {
97
- parent.children[i].hidden = false;
98
- } else {
99
- parent.children[i].hidden = true;
114
+ if (element.className) {
115
+ html.className += element.className;
100
116
  }
101
- }
102
- } else
103
- if (arguments.length == 3) {
104
- // toggle(parent,element,className);
105
- for (let i = 0; i < parent.children.length; i++) {
106
- parent.children[i].hidden = false;
107
- parent.children[i].classList.remove(className);
108
- if (element == parent.children[i]) {
109
- parent.children[i].classList.add(className);
117
+ if (element.style.cssText) {
118
+ html.style.cssText += element.style.cssText;
110
119
  }
120
+ element.parentElement.replaceChild(element, html);
111
121
  }
112
122
  }
123
+ return html;
113
124
  }
114
125
 
115
126
  /**
116
- * 在指定元素内/整个文档查找标签
117
- * @param {Element} element 元素内
118
- * @param {String} selector 选择器
127
+ * 在指定范围内/整个文档查找
128
+ * @param {Element} element 标签元素
129
+ * @param {String} selector 筛选字符
130
+ * @return {Element} 匹配的单个/多个标签元素
119
131
  */
120
132
  function select(element, selector) {
121
- // 仅指定1个参数
122
133
  if (arguments.length == 1) {
123
- // select(selector);
124
- selector = element;
125
- return document.querySelector(selector);
126
- }
127
- // 指定了2个参数
128
- if (arguments.length >= 2) {
129
- // select(element, selector);
130
- if (element) {
131
- if (element.trim) {
132
- element = document.querySelectorAll(element);
134
+ // 仅指定1个参数
135
+ // select(element/selector);
136
+ if (element.trim) {
137
+ element = document.querySelectorAll(element);
138
+ if (element.length == 0) {
139
+ return null;
133
140
  }
134
- if (element.nodeType) {
135
- return element.querySelector(selector);
136
- } else
137
- if (Array.isArray(element)) {
138
- let node;
139
- for (let i = 0; i < elements.length; i++) {
140
- node = elements[i].querySelector(selector);
141
- if (node) {
142
- return node;
143
- }
144
- }
141
+ if (element.length == 1) {
142
+ return element[0];
145
143
  }
146
- return null;
147
- } else {
148
- return document.querySelector(selector);
144
+ return Array.from(element);
145
+ } else
146
+ if (element.nodeType) {
147
+ return element;
149
148
  }
150
- }
151
- }
152
-
153
- /**
154
- * 在指定元素内/整个文档查找标签
155
- * @param {Element} element 元素内
156
- * @param {String} selector 选择器
157
- * @returns {NodeList} 元素集合/空集合
158
- */
159
- function selects(element, selector) {
160
- // 仅指定1个参数
161
- if (arguments.length == 1) {
162
- // select(selector);
163
- selector = element;
164
- return document.querySelectorAll(selector);
165
- }
166
- // 指定了2个参数
167
- if (arguments.length >= 2) {
149
+ } else
150
+ if (arguments.length == 2) {
151
+ // 指定了2个参数
168
152
  // select(element, selector);
169
- let nodes, items = new Array();
170
153
  if (element.trim) {
171
154
  element = document.querySelectorAll(element);
155
+ } else
156
+ if (element.nodeType) {
157
+ element = element.querySelectorAll(selector);
158
+ if (element.length == 0) {
159
+ return null;
160
+ }
161
+ if (element.length == 1) {
162
+ return element[0];
163
+ }
164
+ return Array.from(element);
172
165
  }
173
- if (Array.isArray(element)) {
166
+ if (element.length) {
167
+ let nodes, items = new Array();
174
168
  for (let i = 0; i < element.length; i++) {
175
169
  nodes = element[i].querySelectorAll(selector);
176
- if (nodes && nodes.length) {
177
- for (let i = 0; i < nodes.length; ++i) {
178
- items.push(nodes[i]);
179
- }
170
+ for (let n = 0; n < nodes.length; n++) {
171
+ items.push(nodes[n]);
180
172
  }
181
173
  }
182
- } else {
183
- nodes = element.querySelectorAll(selector);
184
- if (nodes && nodes.length) {
185
- for (let i = 0; i < nodes.length; ++i) {
186
- items.push(nodes[i]);
187
- }
174
+ if (items.length == 0) {
175
+ return null;
176
+ }
177
+ if (items.length == 1) {
178
+ return items[0];
188
179
  }
180
+ return items;
189
181
  }
190
- return items;
191
182
  }
192
183
  }
193
184
 
194
185
  /**
195
- * 绑定事件
196
- * @param {Element} element
197
- * @param {String} selector
198
- * @param {String} evt
199
- * @param {Function} listener
186
+ * 从文档移除
187
+ * @param {Element} element 标签元素
188
+ * @param {String} selector 筛选字符
189
+ * @return {Element} 移除的单个/多个标签元素
200
190
  */
201
- function on(element, selector, evt, listener) {
202
- if (arguments.length == 3) {
203
- // on(element/selector, evt, listener);
204
- listener = evt;
205
- evt = selector;
206
- if (element.trim) {
207
- element = selects(element);
208
- }
191
+ function remove(element, selector) {
192
+ if (arguments.length == 1) {
193
+ element = select(element);
209
194
  } else
210
- if (arguments.length == 4) {
211
- // on(element, selector, evt, listener);
212
- element = selects(element, selector);
195
+ if (arguments.length == 2) {
196
+ element = select(element, selector);
213
197
  } else {
214
198
  return;
215
199
  }
216
-
217
- if (Array.isArray(element)) {
218
- for (let i = 0; i < element.length; i++) {
219
- element[i].addEventListener(evt, listener);
200
+ if (element) {
201
+ if (element.length) {
202
+ for (let i = 0; i < element.length; i++) {
203
+ element[i].remove();
204
+ }
205
+ } else {
206
+ element.remove();
220
207
  }
221
- } else {
222
- element.addEventListener(evt, listener);
223
208
  }
209
+ return element;
224
210
  }
225
211
 
226
- // 这个临时标签用于解析HTML字符串
227
- const TEMP = document.createElement("div");
228
-
229
212
  /**
230
- * 字符串创建HTML元素;
231
- * A仅创建;
232
- * B创建并添加到末尾:append;
233
- * C创建并替换已有元素:replace;
234
- * @param {String} parent
235
- * @param {String} html 字符串形式的HTML内容
236
- * @param {String} place append/replace
237
- * @return {Element} 单个/多个元素
213
+ * 隐藏单个/多个元素
214
+ * @param {Element} element 标签元素
215
+ * @param {String} selector 筛选字符
216
+ * @return {Element} 隐藏的单个/多个标签元素
238
217
  */
239
- function create(parent, html, place) {
240
- if (arguments.length == 0) {
241
- // create();
242
- return null;
243
- } else
218
+ function hide(element, selector) {
244
219
  if (arguments.length == 1) {
245
- // create(html);
246
- html = parent;
247
- parent = null;
220
+ element = select(element);
248
221
  } else
249
222
  if (arguments.length == 2) {
250
- // create(parent,html);
251
- place = 'append';
252
- if (parent) {
253
- if (parent.nodeType) {} else {
254
- parent = select(parent);
255
- }
256
- } else {
257
- parent = document.body;
258
- }
259
- } else
260
- if (arguments.length == 3) {
261
- // create(parent,html,place);
262
- if (parent) {
263
- if (parent.nodeType) {} else {
264
- parent = select(parent);
265
- }
266
- } else {
267
- parent = document.body;
268
- }
269
- }
270
-
271
- // 创建元素
272
- TEMP.innerHTML = html;
273
- let element;
274
- if (TEMP.childElementCount == 1) {
275
- element = TEMP.children[0];
276
- element.remove();
277
- } else
278
- if (TEMP.childElementCount > 1) {
279
- element = new Array();
280
- for (let i = 0; i < TEMP.childElementCount; ++i) {
281
- element.push(TEMP.children[i]);
282
- TEMP.children[i].remove();
283
- }
223
+ element = select(element, selector);
284
224
  } else {
285
- return null;
225
+ return;
286
226
  }
287
-
288
- // 添加元素到文档
289
- if (parent) {
290
- if ("append" === place) {
291
- if (element.length) {
292
- for (let i = 0; i < element.length; i++) {
293
- parent.appendChild(element[i]);
294
- }
295
- } else {
296
- parent.appendChild(element);
297
- }
298
- } else
299
- if ("replace" === place) {
300
- if (parent.parentElement) {
301
- if (element.length) {
302
- // 待验证
303
- parent.parentElement.replaceWith(element);
304
- } else {
305
- parent.parentElement.replaceChild(parent, element);
306
- }
227
+ if (element) {
228
+ if (element.length) {
229
+ for (let i = 0; i < element.length; i++) {
230
+ element[i].hidden = true;
231
+ element[i].__DISPLAY = element[i].style.display
232
+ element[i].style.display = "none";
307
233
  }
308
234
  } else {
309
- console.error("eno.create 不明确的参数" + place);
235
+ element.hidden = true;
236
+ element.__DISPLAY = element[i].style.display
237
+ // display:flex 导致 hidden 属性失效而不会隐藏
238
+ element.style.display = "none";
310
239
  }
311
240
  }
312
241
  return element;
313
242
  }
314
243
 
315
244
  /**
316
- * 从文档移除一个或多个元素
317
- * @param {Element} element 元素/元素数组
245
+ * 显示单个/多个元素
246
+ * @param {Element} element 标签元素
247
+ * @param {String} selector 筛选字符
248
+ * @return {Element} 显示的单个/多个标签元素
318
249
  */
319
- function remove(element) {
250
+ function show(element, selector) {
251
+ if (arguments.length == 1) {
252
+ element = select(element);
253
+ } else
254
+ if (arguments.length == 2) {
255
+ element = select(element, selector);
256
+ } else {
257
+ return;
258
+ }
320
259
  if (element) {
321
- if (element.trim) {
322
- // remove("p");
323
- element = selects(element);
324
- }
325
- if (element.tagName) {
326
- // remove(document.getElementById("test"));
327
- element.remove();
328
- } else
329
260
  if (element.length) {
330
- // remove(["p","span"]);
331
- // remove(document.getElementByTagName("div"));
332
261
  for (let i = 0; i < element.length; i++) {
333
- remove(element[i]);
262
+ element[i].hidden = false;
263
+ element[i].style.display = element[i].__DISPLAY;
334
264
  }
265
+ } else {
266
+ element.hidden = false;
267
+ element.style.display = element.__DISPLAY;
335
268
  }
336
269
  }
270
+ return element;
337
271
  }
338
272
 
339
273
  /**
340
- * 读取 URL 中的 Query String 参数值
341
- * @param {String} name 参数名
274
+ * 切换指定元素显示,同级其余元素隐藏;
275
+ * 如果指定样式类名,则当前原始添加样式类,其余元素移除样式类
276
+ * @param {Element} element 标签元素
277
+ * @param {String} selector 筛选字符
278
+ * @param {String} className 类名称
279
+ * @return {Element} 显示的单个/多个标签元素
342
280
  */
343
- function query(url, name) {
281
+ function toggle(element, selector, className) {
344
282
  if (arguments.length == 1) {
345
- // getQueryString(name)
346
- name = url;
347
- // window.location.search 返回从问号?开始的URL查询部分
348
- // ?name1=value1&name2=value2
349
- url = window.location.search;
350
- }
283
+ // toggle(element)
284
+ element = select(element);
285
+ } else
351
286
  if (arguments.length == 2) {
352
- // getQueryString(url, name)
353
- let index = url.indexof("?");
354
- if (index > 0) {
355
- url = url.substring(index);
356
- } else {
357
- return null;
358
- }
287
+ // toggle(element,selector)
288
+ // toggle(element,className)
289
+ element = select(element, selector);
290
+ } else
291
+ if (arguments.length == 3) {
292
+ // toggle(element,selector,className)
293
+ element = select(element, selector);
294
+ } else {
295
+ return;
359
296
  }
360
-
361
- if (url) {
362
- let start = url.indexOf(name);
363
- if (start >= 0) {
364
- start += name.length;
365
- if (url.charAt(start) == '=') {
366
- start++;
367
- let end = url.indexOf('&', start);
368
- if (end >= 0) {
369
- return url.substring(start, end);
297
+ if (element) {
298
+ const parent = element.parentElement;
299
+ if (className) {
300
+ for (let i = 0; i < parent.children.length; i++) {
301
+ parent.children[i].classList.remove(className);
302
+ if (element == parent.children[i]) {
303
+ parent.children[i].classList.add(className);
304
+ }
305
+ }
306
+ } else {
307
+ for (let i = 0; i < parent.children.length; i++) {
308
+ if (element == parent.children[i]) {
309
+ show(parent.children[i]);
310
+ } else {
311
+ hide(parent.children[i]);
370
312
  }
371
- return url.substring(start);
372
313
  }
373
314
  }
374
315
  }
375
- return null;
316
+ return element;
376
317
  }
377
318
 
378
319
  // 默认转换函数
@@ -380,16 +321,34 @@ function defaultConverter(element, parameter, name) {}
380
321
 
381
322
  /**
382
323
  * 从指定元素获取值以JSON对象返回{name:value}
383
- * @param {Element} element 元素
324
+ * @param {Element} element 标签元素
325
+ * @param {String} selector 筛选字符
384
326
  * @param {Function} converter 转换
385
- * @returns {Object} {name1:value1,name2:value2,...}
327
+ * @return {Object} {name1:value1,name2:value2,...}
386
328
  */
387
- function gets(element, converter = defaultConverter) {
388
- if (element) {
389
- if (element.trim) {
390
- element = selects(element);
329
+ function gets(element, selector, converter = defaultConverter) {
330
+ if (arguments.length == 1) {
331
+ // gets(element)
332
+ element = select(element);
333
+ } else
334
+ if (arguments.length == 2) {
335
+ // gets(element,selector)
336
+ // gets(element,converter)
337
+ if (selector.trim) {
338
+ element = select(element, selector);
339
+ } else {
340
+ element = select(element);
341
+ converter = selector;
391
342
  }
392
- if (Array.isArray(element)) {
343
+ } else
344
+ if (arguments.length == 3) {
345
+ // gets(element,selector,converter)
346
+ element = select(element, selector);
347
+ } else {
348
+ return;
349
+ }
350
+ if (element) {
351
+ if (element.length) {
393
352
  let parameter = {},
394
353
  parameters = new Array();
395
354
  for (let i = 0; i < element.length; i++) {
@@ -409,38 +368,39 @@ function gets(element, converter = defaultConverter) {
409
368
  }
410
369
 
411
370
  /**
412
- * 从指定JSON设置元素值,以name属性作为标识
413
- * @param {Element} element 元素
414
- * @param {Object} parameter 对象
415
- * @param {Function} converter 转换
416
- * @returns {Element} element
371
+ * 从指定JSON对象设置元素值,以name属性作为标识
372
+ * @param {Element} element 标签元素
373
+ * @param {String} selector 筛选字符
374
+ * @param {Object} parameter 数据对象
375
+ * @param {Function} converter 数据转换
376
+ * @return {Element} 设置的单个/多个标签元素
417
377
  */
418
- function sets(element, parameter, converter = defaultConverter) {
419
- if (element) {
420
- if (element.trim) {
421
- // 元素选择字符串
422
- element = selects(element);
423
- if (element.length == 0) {
424
- return null;
425
- } else
426
- if (element.length == 1) {
427
- element = element[0];
428
- } else {
429
- // 多个匹配元素
430
- }
378
+ function sets(element, selector, parameter, converter = defaultConverter) {
379
+ if (arguments.length == 2) {
380
+ // sets(element,parameter)
381
+ element = select(element);
382
+ parameter = selector;
383
+ } else
384
+ if (arguments.length == 3) {
385
+ // sets(element,selector,parameter)
386
+ // sets(element,parameter,converter)
387
+ if (selector.trim) {
388
+ element = select(element, selector);
389
+ } else {
390
+ element = select(element);
391
+ converter = parameter;
392
+ parameter = selector;
431
393
  }
432
-
394
+ } else
395
+ if (arguments.length == 4) {
396
+ // sets(element,selector,parameter,converter)
397
+ element = select(element, selector);
398
+ } else {
399
+ return;
400
+ }
401
+ if (element) {
433
402
  if (parameter) {
434
403
  if (Array.isArray(parameter)) {
435
- // if (element.nodeType) {
436
- // if (element.childElementCount) {
437
- // element = element.children;
438
- // } else {
439
- // // ???
440
- // return null;
441
- // }
442
- // }
443
-
444
404
  let i = 0;
445
405
  // 利用ENO_SET记录并判定是否首次
446
406
  if (element.ENO_SETS) {
@@ -695,8 +655,47 @@ function text(o) {
695
655
  return "";
696
656
  }
697
657
 
658
+ /**
659
+ * 绑定事件
660
+ * @param {Element} element 标签元素
661
+ * @param {String} selector 筛选字符
662
+ * @param {String} eventName 事件名称
663
+ * @param {Function} listener 事件处理
664
+ * @example bind(element,eventName,listener);
665
+ * @example bind(element,selector,eventName,listener);
666
+ * @return {Element} 绑定事件的标签元素
667
+ */
668
+ function bind(element, selector, eventName, listener) {
669
+ if (arguments.length == 3) {
670
+ // bind(element,eventName,listener);
671
+ element = selects(element);
672
+ listener = eventName;
673
+ eventName = selector;
674
+ } else
675
+ if (arguments.length == 4) {
676
+ // bind(element,selector,eventName,listener);
677
+ element = selects(element, selector);
678
+ } else {
679
+ return;
680
+ }
681
+ if (element) {
682
+ if (element.length) {
683
+ for (let i = 0; i < element.length; i++) {
684
+ element[i].addEventListener(eventName, listener);
685
+ }
686
+ } else {
687
+ element.addEventListener(eventName, listener);
688
+ }
689
+ }
690
+ return element;
691
+ }
692
+
698
693
  /**
699
694
  * 根据事件或元素获取由sets关联的实体对象
695
+ * @example entity(event);
696
+ * @example entity(element);
697
+ * @example entity(element,selector);
698
+ * @return {Object} 标签元素关联的数据对象
700
699
  */
701
700
  function entity(e, selector) {
702
701
  if (arguments.length == 1) {
@@ -752,6 +751,7 @@ function action(e, a) {
752
751
  /**
753
752
  * 根据事件获取绑定实体的元素
754
753
  * @param {Event} e
754
+ * @return {Element} 标签元素关联的数据对象
755
755
  */
756
756
  function element(e) {
757
757
  if (e && e.target) {
@@ -769,4 +769,44 @@ function element(e) {
769
769
  }
770
770
  }
771
771
  return null;
772
+ }
773
+
774
+ /**
775
+ * 读取 URL 中的 Query String 参数值
776
+ * @param {String} name 参数名
777
+ * @return {String} 参数值
778
+ */
779
+ function query(url, name) {
780
+ if (arguments.length == 1) {
781
+ // getQueryString(name)
782
+ name = url;
783
+ // window.location.search 返回从问号?开始的URL查询部分
784
+ // ?name1=value1&name2=value2
785
+ url = window.location.search;
786
+ }
787
+ if (arguments.length == 2) {
788
+ // getQueryString(url, name)
789
+ let index = url.indexof("?");
790
+ if (index > 0) {
791
+ url = url.substring(index);
792
+ } else {
793
+ return null;
794
+ }
795
+ }
796
+
797
+ if (url) {
798
+ let start = url.indexOf(name);
799
+ if (start >= 0) {
800
+ start += name.length;
801
+ if (url.charAt(start) == '=') {
802
+ start++;
803
+ let end = url.indexOf('&', start);
804
+ if (end >= 0) {
805
+ return url.substring(start, end);
806
+ }
807
+ return url.substring(start);
808
+ }
809
+ }
810
+ }
811
+ return null;
772
812
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joyzl/eno",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Easy Node Object",
5
5
  "main": "index.js",
6
6
  "scripts": {