在javascript中修改对象内的节点

在javascript中修改对象内的节点,javascript,javascript-objects,Javascript,Javascript Objects,对于如何访问已创建节点对象的属性类名,我有点困惑 var track = { mod: { el: document.body.appendChild(document.createElement('div')), el.className: 'w3-container w3-teal w3-hover-green' } }; 不幸的是,这提供了错误: Uncaught SyntaxError: Unexpected token . 我试图简单地在对象中创建一个对象

对于如何访问已创建节点对象的属性类名,我有点困惑

 var track = {
  mod: {
    el: document.body.appendChild(document.createElement('div')),
    el.className: 'w3-container w3-teal w3-hover-green'
  }
};
不幸的是,这提供了错误:

Uncaught SyntaxError: Unexpected token .

我试图简单地在对象中创建一个对象,并修改内部对象的属性。我四处搜索,没有找到任何特定于此访问级别的内容,因为我需要修改DOM元素“className”的实际属性,而不仅仅是className的赋值属性。

似乎只是语法问题……不是吗:

var track = {
  mod: {
    el: document.body.appendChild(document.createElement('div')),
    el: {
        className: 'w3-container w3-teal w3-hover-green'
    }
  }
};

您试图在那里做的事情非常简洁,但遗憾的是JavaScript没有现成的支持

不过,这是一种仍然可以让它工作的方法:

var track = {
  mod: {
    el: document.body.appendChild(document.createElement('div'))
  }
};

// Add the className property here
track.mod.el.className = 'w3-container w3-teal w3-hover-green';

可以使用立即调用的函数表达式,如下所示:

 var track = {
  mod: {
    el: (function () {
      var el = document.body.appendChild(document.createElement('div'));
      el.className = 'w3-container w3-teal w3-hover-green';
      return el;
    }())
  }
};

当然,这只能在
body
存在之后进行。另外,
不会在函数中引用
轨迹
轨迹.mod

可能的重复项>我正在尝试在对象内创建一个对象并修改内部对象的属性-不可能直接进行。但您始终可以修改原始对象。当对象仍在创建时,您无法访问对象属性。稍后必须执行
track.mod.el.className='w3 container w3 teal w3 hover green'
。创建IIFE以创建元素,并设置所需的属性,然后返回新创建的元素。注意,该
不能在iLife中用于引用
mod
。因此,如果我想创建一个通用化的轨迹对象,我必须在对象创建时包装一个函数,以便在创建后指定值?这只会覆盖
mod.el
的指定值。这似乎不正确-这将创建并附加一个元素,然后还将其添加为对
el
属性的引用,但下一行将覆盖该引用。这将覆盖
el
对象,从而去掉div元素。我同意您可以这样做,这是一个相当干净的解决方案,但总体而言,这似乎仍然像是一次性放置了太多逻辑。我认为没有一个好的理由让对象创建和DOM操作同时完成。它可能会保存一行代码,但最好将它们分开。在这种情况下,我尝试创建一个泛化的轨迹对象,然后根据需要修改它。虽然这是一个有点卷积,但它做了我需要它做的事情,而无需每次我需要一个通用轨迹时创建和修改轨迹对象。