我正在使用javascript创建自己的类方法
.hide = function() {
this.each(function(index){
this.style.display="none";
});
};
但这不起作用。 你能告诉我我做错了吗?
答案 0 :(得分:0)
不建议在Javascript中向现有对象添加功能。但是,您可以创建一个这样的辅助函数:
var hide = function(domEle) {
domEle.style.display="none";
}
为了能够使用您的语法,您可以执行以下操作:
以下是一些基本代码(我没有对语法错误进行测试):
function myLittleJQuery() {
this._array = [];
}
myLittleJQuery.prototype = {
add: function(domEle) {
this._array.push(domEle);
},
hide: function() {
this._array.forEach(function(domEle){
domEle.style.display = "none";
})
}
}
//Usage
var my$ = new myLittleJQuery();
my$.add(someDomEle);
my$.add(someOtherDomEle);
my$.hide();
答案 1 :(得分:0)
Element.prototype.hide = function() {
this.style.display="none";
};
您可以扩展单个DOM元素。这里我们将hide方法添加到Element的原型中。如果我那么
document.querySelector("h2").hide();
页面上的第一个h2元素消失。
这是将方法添加到各个dom元素上。如果你想对dom元素集合进行操作,那么你将不得不扩展NodeList
的原型,这是你得到的对象类型
document.querySelectorAll("h2");
解决此问题的一种方法是将hide
方法放在每个DOM元素上。然后在hide
上添加不同的NodeList
方法。也许是这样的:
Element.prototype.hide = function() {
this.style.display="none";
};
NodeList.prototype.hide = function() {
for (var i = 0; i < this.length; i++) {
this[i].hide();
}
};
添加这两种方法会为您提供灵活的API,让您可以在元素列表或单个元素上调用hide
。
然后运行
document.querySelectorAll("h2").hide();
会隐藏页面上的所有h2
元素。
IE6-7不支持此功能。因此,如果这对您来说是一个问题,那么使用jQuery。
答案 2 :(得分:0)
如果您不想扩展DOM元素,那么您仍然可以使用aychedee的代码,但将其定义为函数:
var hide = function() {
if(! this)
return null;
var i;
if(this.length){
i=this.length;
while(--i !== -1) {
this[i].style.display="none";
}
return this;
}
this.style.display="none";
return this;
};
hide.call(document.getElementById("someid"));
hide.call(document.getElementsByTagName("p"));