2014-01-06 166 views
1

我有以下的html:jQuery的添加li元素数组

 <ul id="note-item-lists" class="list-group list-group-sp"> 
    <li id="1" class="list-group-item"> 
     <div id="note-4" class="view"> 
      <button class="destroy close hover-action">×</button> 
      <div class="note-name"> 
       <strong id="new_note_title"> New note </strong> 
      </div> 
     </div> 
    </li> 
    <li id="2" class="list-group-item"> 
     <div id="note-4" class="view"> 
      <button class="destroy close hover-action">×</button> 
      <div class="note-name"> 
       <strong id="new_note_title"> Old note </strong> 
      </div> 
     </div> 
    </li> 
    </ul> 

现在我希望这两个<li>的存储到一个数组。

为此我已经创建了下面的JavaScript代码:

var notes = new Array(); 

$('.list-group-item').each(function(){ 
    notes[$(this).id] = $(this); 
}); 

然而,当我调试我得到一个空array什么想法?

+0

也许你只是想:'var $ lis = $('。list-group-item')'。这比保存DOM元素的数组好,它是一个jQuery集合。你想用这些ID做什么?他们为什么对你的阵列很重要? – elclanrs

+0

@elclanrs以上是长php生成列表的示例:)真正的应用程序将有数百个项目,其中id与数据库引用的id相匹配 –

+0

为什么不能将您的DOM保留在jQuery集合中。当你需要获取一些元素并检索它们的id时,过滤集合,映射id,然后映射'.toArray'。尽可能地保持你的jQuery集合,这是我的建议。 – elclanrs

回答

2

你快到了。 id是DOM节点的属性,而不是jQuery对象的属性,所以您应该使用this.id而不是$(this).id

var notes = []; 
$('.list-group-item').each(function() { 
    notes[this.id] = $(this); 
}); 

请记住,你的第一个li元素具有1id,但JavaScript数组是零索引,所以notes(即notes[0])的第一个元素将是undefined。我建议只是将它们推到数组中出现的顺序:

var notes = []; 
$('.list-group-item').each(function() { 
    notes.push($(this)); 
}); 
+0

也注意不是一个数组它应该是一个对象 –

+0

@Peter感谢您的帮助!该ID是以后搜索所需的。然而,我在想,JavaScript没有什么比较hashmap?可以? –

+0

它在Javascript中被称为对象。你可以使用'var notes = {}'来代替'var notes = []''来像使用哈希映射一样使用它。 (注意,'[]'和'{}'比'new Array()'和'new Object()'更快更短。) –

0

如果您在Chrome控制台检查,你应该把它声明为一个对象,你正在使用它作为一个对象。 Chrome是怪异与控制台阵列(当然,实际上他们做的是正确的,如JavaScript数组基本上都是对象,并且有没有关联数组本身):

x = new Array() 
//[] 
x['a'] = 1 
//1 
x 
//[] 

但是:

x = {} 
//Object {} 
x['a'] = 1 
//1 
x 
//Object {a: 1}