为什么我不能将此元素引用设置为变量?

时间:2011-09-19 01:57:40

标签: javascript jquery

我有一个javascript对象(简化)。

var MyObject = (function(){

  var propertyOne = $('.links li:first-child');
  var propertyTwo = $('.links .active');

  function startup()
  {
    propertyOne.addClass("class");  //Works
    propertyTwo.addClass("class2");  //Does not work
    $('.links .active').addClass("class2");  // Works
  }

  return {
     init: function()
     {
       startup();
     }
  }
});

我选择propertyOne和propertyTwo的方式有什么不同?我不明白为什么

propertyOne.addClass("class");  //Works
$('.links .active').addClass("class2");  // Works

...然而

propertyTwo.addClass("class2");  //Does not work

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:3)

在调用var propertyTwo = $('.links .active')时,propertyTwo的DOM元素不能存在,而调用startup()时则不行。

要确认这一点,我们需要有关您的脚本的更多信息。例如,如果在DOM完全加载之前创建MyObject,然后在DOM完全加载之后调用init()方法(或者至少在元素对应之后),我之前描述的内容可能会发生已加载$('.links .active')

无论如何,你应该专注于学习如何调试这样的东西以及为什么这个特定的尝试不起作用。此过程的主要步骤是在行propertyTwo之后立即登录控制台var propertyTwo = $('.links .active')。如果控制台显示[](至少在Chrome中),则表示没有匹配的元素,这将支持我所说的情况。