@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.
- package/index.js +347 -307
- 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
|
-
|
8
|
-
|
7
|
+
append,
|
8
|
+
replace,
|
9
9
|
select,
|
10
|
-
|
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 {
|
31
|
+
* HTML字符串创建标签元素实例
|
32
|
+
* @param {String} html HTML字符串
|
33
|
+
* @return {Element} 创建的单个/多个标签元素
|
28
34
|
*/
|
29
|
-
function
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
element.
|
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
|
50
|
-
if (
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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 {
|
69
|
-
* @
|
70
|
-
* @param {String} className 类名称
|
86
|
+
* 创建并替换为标签元素
|
87
|
+
* @param {Element} element 标签元素
|
88
|
+
* @param {String} html HTML字符串
|
89
|
+
* @return {Element} 创建的单个/多个标签元素
|
71
90
|
*/
|
72
|
-
function
|
73
|
-
if (
|
74
|
-
|
91
|
+
function replace(element, html) {
|
92
|
+
if (arguments.length == 2) {
|
93
|
+
element = select(element);
|
94
|
+
} else {
|
95
|
+
return;
|
75
96
|
}
|
76
|
-
if (
|
77
|
-
|
78
|
-
|
79
|
-
if (element.parentElement != parent) {
|
80
|
-
parent.appendChild(element);
|
81
|
-
}
|
97
|
+
if (html.trim) {
|
98
|
+
html = create(html);
|
82
99
|
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
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
|
-
|
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
|
-
//
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
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.
|
135
|
-
return element
|
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
|
147
|
-
} else
|
148
|
-
|
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 (
|
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
|
-
|
177
|
-
|
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
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
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
|
-
* @
|
199
|
-
* @param {Function} listener
|
186
|
+
* 从文档移除
|
187
|
+
* @param {Element} element 标签元素
|
188
|
+
* @param {String} selector 筛选字符
|
189
|
+
* @return {Element} 移除的单个/多个标签元素
|
200
190
|
*/
|
201
|
-
function
|
202
|
-
if (arguments.length ==
|
203
|
-
|
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 ==
|
211
|
-
|
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
|
-
|
218
|
-
|
219
|
-
|
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
|
-
*
|
231
|
-
*
|
232
|
-
*
|
233
|
-
*
|
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
|
240
|
-
if (arguments.length == 0) {
|
241
|
-
// create();
|
242
|
-
return null;
|
243
|
-
} else
|
218
|
+
function hide(element, selector) {
|
244
219
|
if (arguments.length == 1) {
|
245
|
-
|
246
|
-
html = parent;
|
247
|
-
parent = null;
|
220
|
+
element = select(element);
|
248
221
|
} else
|
249
222
|
if (arguments.length == 2) {
|
250
|
-
|
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
|
225
|
+
return;
|
286
226
|
}
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
-
*
|
341
|
-
*
|
274
|
+
* 切换指定元素显示,同级其余元素隐藏;
|
275
|
+
* 如果指定样式类名,则当前原始添加样式类,其余元素移除样式类
|
276
|
+
* @param {Element} element 标签元素
|
277
|
+
* @param {String} selector 筛选字符
|
278
|
+
* @param {String} className 类名称
|
279
|
+
* @return {Element} 显示的单个/多个标签元素
|
342
280
|
*/
|
343
|
-
function
|
281
|
+
function toggle(element, selector, className) {
|
344
282
|
if (arguments.length == 1) {
|
345
|
-
//
|
346
|
-
|
347
|
-
|
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
|
-
//
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
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
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
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
|
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
|
-
* @
|
327
|
+
* @return {Object} {name1:value1,name2:value2,...}
|
386
328
|
*/
|
387
|
-
function gets(element, converter = defaultConverter) {
|
388
|
-
if (
|
389
|
-
|
390
|
-
|
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
|
-
|
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
|
413
|
-
* @param {Element} element
|
414
|
-
* @param {
|
415
|
-
* @param {
|
416
|
-
* @
|
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 (
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
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
|
}
|