2013-02-27 27 views
0

我试图收集一组特定的<li>元素,我希望稍后在循环中使用它们。但是,我似乎没有正确的语法:调试控制台告诉我,我的对象是未定义的。有人能告诉我我做错了什么吗?如何jQuery获取元素并存储在数组中供以后使用?

var all_help_triggers = []; 
$(".canned-triggers > li").each(function() { all_help_triggers.push($(this)) }); 
all_help_triggers[0].click(function(){alert('hi!');}) 
+0

显示你的HTML ... – Mortalus 2013-02-27 03:32:47

+1

似乎工作在这里罚款:: http://jsfiddle.net/BVrwu/ – 2013-02-27 03:36:47

回答

3

您可以简单地这样做:

// save selected jQuery objects into variable 
var all_help_triggers = $(".canned-triggers > li"); 

// get first element in jQuery object, and assign a click handler 
all_help_triggers.eq(0).click(function(){ 
    alert('hi!'); 
}); 

编辑(关闭额外的基于注释):

要获得索引,使用.index()

$('.canned-content > li').hide(); 

$('.canned-triggers > li').click(function() { 
    var i = $(this).index(); 
    $('.canned-content > li').eq(i).show(); 
}); 

http://jsfiddle.net/samliew/erp2J/11/

如果你想隐藏页面加载列表,你应该在CSS中完成。相反的:

$('.canned-content > li').hide(); 

删除该行并添加这个CSS来代替:当您使用的每个()的“本”价值是指“每个”元素进行迭代

.canned-content > li { display: none; } 
+0

.eq():完美!然而,现在我试图在循环中应用它,让每个触发器在另一个列表中触发其按时间顺序排列的相似内容,如下所示:http://jsfiddle.net/foomarks/erp2J/8/有什么建议吗? – 2013-02-27 04:02:34

+0

查看最新的答案 – 2013-02-27 04:09:38

+0

太棒了!这是一个非常简单的解决方案,谢谢! – 2013-02-27 04:13:44

1

。因此,而不是使用一个额外的数组,你应该尝试类似的东西...

$(".canned-triggers > li").each(function() { 
    $(this).click(function({ 
     alert('hi!') 
    }); 
}); 

只注意到您的评论:

看到小提琴例如:http://jsfiddle.net/ScRqc/

<ul class="canned-triggers"> 
    <li data-element="#li1">heyo1</li> 
    <li data-element="#li2">heyo2</li> 
    <li data-element="#li3">heyo3</li> 
</ul> 

<ul class="canned-content"> 
    <li id="li1">I'm heyo content 1</li> 
    <li id="li1">I'm heyo content 2</li> 
    <li id="li2">I'm heyo content 3</li> 
</ul> 


$('.canned-content > li').hide(); 

$('.canned-triggers > li').click(function() { 
    var toggleElement = $(this).data("element"); 
    $(toggleElement).show(); 
}); 
+0

固定 - 谢谢! :)复制粘贴问题:) – Mortalus 2013-02-27 03:37:47

+0

这太棒了。不幸的是,我不知道如何在一个场景中应用这种情况,当我想要触发器在另一个组中按时间顺序进行触发时,就像这样:http://jsfiddle.net/foomarks/erp2J/8/这仍然是可能的只需要应用.each()? – 2013-02-27 04:04:20

-1

您应该检查是否你的选择确实返回任何东西

此外,一个jQuery集合是类似数组的,意味着你不需要将它明确地转换为数组......你可以通过for循环它,没有任何问题。

但是,如果你还需要一个JavaScript数组,你可以用下面的代码这样做:

var all_help_triggers = $.makeArray($(".canned-triggers > li")); 

更多文档上$.makeArray方法here

+0

不错,我试图帮助用户,我没有进一步的评论,得到一个downvote。非常好。 – gustavohenke 2013-02-27 03:59:37

相关问题