对于JavaScript而言,我仍然是一个新手,并且试图让我的代码更清晰,并且想知道为什么顶级场景可以工作但是底部没有?我错过了什么吗?
var partner = document.getElementById('partner');
var providedBy = document.getElementById('providedBy');
partner.style.display = "none";
providedBy.style.display = "none";
但这不是吗?
var partner = document.getElementById('partner');
var providedBy = document.getElementById('providedBy');
collection = partner + providedBy;
collection.style.display = "none";
在控制台中,它给出了错误,指出无法设置未定义的属性“显示”。我应该先把它定义在某个地方吗?我控制台记录了新变量,它返回了两个div元素。
答案 0 :(得分:2)
collection
的字符串类型为+
运算符自动调用toString()
函数。
现在你要做的是访问一个collection.style
的属性,因为你在字符串上操作,所以它不存在。这就是您收到错误消息的原因。
您可以执行以下操作:
var collection = [];
collection.push(document.getElementById('partner'));
collection.push(document.getElementById('providedBy'));
collection.forEach(function(element) {
element.style.display = 'none';
}
这是我认为你试图存档的东西。
答案 1 :(得分:1)
只是为了补充接受的答案,我想你应该明白为什么会出现这个错误。
根据您对代码的理解,您尝试将variables
合作伙伴和providedBy
的css设置为display : none
。
你的第一段代码是可行的,因为你是单独执行此操作,而在第二段代码中,你尝试使用(+)运算符添加两个节点,这些节点的计算结果为“[object HTMLDivElement] [object HTMLInputElement]”。 / p>
然后你试着在那个评估为.style
的字符串上调用undefined
,然后你尝试在那个未定义的值上调用display,这就是你得到错误的地方。
你可以保留你的代码,因为没有太多的变量,但如果你想做一些可以处理多个变量的东西,你可以
答案 2 :(得分:0)
在JavaScript中,您必须声明所有变量。其次,您不能使用+运算符一次指向两个对象。 JavaScript将此解释为尝试连接两个对象,它不能以这种方式执行。它将返回字符串[object Object][object Object]
为了同时影响两个对象,您需要创建一个函数或使用现有方法。