【发布时间】:2015-10-26 06:29:42
【问题描述】:
我正在尝试构建一个像 jQuery 这样的 Javascript 库,只是为了更多地学习 Javascript。到目前为止,我已经开发了这个:
window.jsLib = function (selector) {
var about = {
Version: 0.1
};
if (selector) {
if (window === this) {
return new jsLib(selector);
}
if (typeof selector === 'string') {
var nodes = document.querySelectorAll(selector);
for (var i = 0; i < nodes.length; i++) {
this[i] = nodes[i];
}
this.length = nodes.length;
} else if (typeof selector === 'object') {
this[0] = selector;
this.length = 1;
}
return this;
} else {
return about;
}
};
对于方法,我开发了一些类似的方法:
jsLib.fn = jsLib.prototype = {
css: function (key, value) {
if (value !== undefined) {
for (var i = 0; i < this.length; i++) {
this[i].style[key] = value;
}
return this;
} else {
for (var i = 0; i < this.length; i++) {
return this[i].style[key];
}
}
},
html: function (value) {
if (value !== undefined) {
for (var i = 0; i < this.length; i++) {
this[i].innerHTML = value;
}
return this;
} else {
for (var i = 0; i < this.length; i++) {
return this[i].innerHTML;
}
}
},
on: function (type, callback) {
console.log(window.event);
for (var i = 0; i < this.length; i++) {
this[i].addEventListener(type, callback, false);
}
return this;
},
trigger: function (type) {
var event = new Event(type);
for (var i = 0; i < this.length; i++) {
this[i].dispatchEvent(event);
}
return this;
},
append: function(value) {
var old = this.html();
this.html(old + '' + value);
return this;
}
};
你可能已经注意到我已经定义了一个方法on 像jQuery。
每当我像jsLib('div#foo').on('click', someFunc); 一样打电话时,它工作正常。
但是,假设我附加了一些像jsLib('body').append('<a id="#bar" href="#">Click</a>');这样的html
然后我想提供一个 API 来将事件侦听器添加到 #bar,例如 jsLib('body').on('click', '#bar', someOtherFunc);。
但我不确定如何实现这个监听器。
请帮忙。
【问题讨论】:
-
你已经做到了,你可以重复使用你提到的'on'函数工作正常!
-
感谢您的回复。
on方法适用于已加载的元素。但我想为尚未创建的元素添加一个侦听器。您能否提供一个如何重用on方法的示例? -
你必须等到元素存在。我不确定这是如何完成的。您最好的方法是查看该特定方法的 jQuery 源代码。我可能会为那些石器时代的浏览器做准备做的事情;不断地使用计时器进行检查!
-
感谢您的建议。
标签: javascript event-handling dom-events event-listener dynamic-html