使用属性显示设置变量分配

时间:2017-08-29 16:34:09

标签: javascript

对于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元素。

3 个答案:

答案 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,这就是你得到错误的地方。

你可以保留你的代码,因为没有太多的变量,但如果你想做一些可以处理多个变量的东西,你可以

  1. 创建一个数组
  2. 将您的对象推入数组
  3. 创建一个循环遍历数组元素的函数,并将它们的style.display =“none”单独设置。

答案 2 :(得分:0)

在JavaScript中,您必须声明所有变量。其次,您不能使用+运算符一次指向两个对象。 JavaScript将此解释为尝试连接两个对象,它不能以这种方式执行。它将返回字符串[object Object][object Object]

为了同时影响两个对象,您需要创建一个函数或使用现有方法。