在我当前的项目中,当我尝试更改 html 元素的属性时,我遇到了一些奇怪的行为(从我的角度来看)。
在我的代码中,定义了一个 javascript 对象 - 这个对象有一个 'this.element' 属性,包含一个 html 元素,它通过构造函数传递。在这个对象中,我有几个函数。在其中一个函数中,我试图通过执行以下操作来更改该对象的某些样式:
this.element.style.visibility = "hidden";
尝试执行此操作时没有错误,但样式保持不变。一段时间后,我发现了一个解决方法:
document.getElementById(this.element.id).style.visibility = "hidden";
这基本上是一样的。这行得通,我可以设置元素的样式。尽管此解决方法有效,但它要求我的元素具有 ID。虽然这不是问题,但如果我能解决这个问题,我的编码会变得容易得多。
我正在使用 Chrome 进行测试,一旦项目准备好部署,我们将使用相同的浏览器,因此使用不同的浏览器对我来说并不是一个真正的选择。
如果有人能帮助我理解/解决这种情况,我将不胜感激:) - 提前致谢
编辑:更多代码。我放在一起的这个例子说明了我在做什么。但是,当我自己运行它时,我无法实现我所描述的行为。
我不知道这是否重要,但在我的情况下,代表“changeAllStyles”的函数在构造函数之后被调用时工作正常。此函数的所有子序列调用都是由于调用了来自 websockets 的“onMessage”事件。
var myObjArray = [];
function init(){
//Using jQuery to select all elements containing the "data-whatever" attribute:
var elements = $('*[data-whatever]');
//Create a myObj object for each of theese elements:
for (var i = 0; i < elements.length; i++) {
var params = elements[i].getAttribute("data-whatever");
myObjArray.push(new myObj(elements[i], params));
myObjArray[i].changeStyle();
}
}
function myObj(element, params){
this.element = element;
this.params = params;
this.changeStyle = function(){
this.element.style.visibility = "hidden";
};
}
function changeAllStyles(){
for (var i = 0; i < myObjArray.length; i++) {
myObjArray[i].changeStyle();
}
}