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