如何jquery获取元素并存储在数组中供以后使用?

时间:2013-02-27 03:30:28

标签: jquery arrays

我正在尝试收集一组特定的<li>元素,我希望稍后在循环中使用这些元素。但是,我似乎没有正确的语法:调试控制台告诉我我的对象是未定义的。有人能告诉我我做错了什么吗?

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

3 个答案:

答案 0 :(得分: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; }

答案 1 :(得分:1)

当你使用each()时,“this”值引用它迭代的“each”元素。所以相反使用一个额外的数组,你应该尝试类似的东西......

$(".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();
});

答案 2 :(得分:-1)

您应该检查您的选择器是否确实返回任何内容。

此外,jQuery集合类似于数组,这意味着您不需要将其显式转换为数组...您可以使用for循环它而不会出现任何问题。

但是,如果您仍需要JavaScript数组,则可以使用以下代码执行此操作:

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

$.makeArray方法here

上的更多文档