如何在数组中保存jQuery对象以供以后使用?

How can I save a jQuery object in my array for a later use?

本文关键字:对象 jQuery 数组 保存      更新时间:2023-09-26

我有一些用户用鼠标挑选的图标。

我有这一系列的图标,我可以选择和设置它们的边框。我将选择的图标数量限制为5个。第一个选中的会变成一个黄色的边框。接下来的4将是黑色边框。

文档。ready, I do:

$ (' img.selectable) .click(函数(){image_click(这个);});

对于CSS:

.selectable {
    border: 3px solid #ebe6b3;
    float:left;
    margin:1px;
}

对于HTML:

<img class="selectable" src="img/first_icon.png">

我有这个功能:

function image_click(e)
{
    if($(e).data("clicked")=="yes")
    {
        images_selected--;
        $(e).data("clicked","no").css('border','3px solid ' + NEUTRAL_COLOR);
        if(images_selected==1)
        {
          $('img.selectable').not( e ).filter(function() {
                    return $( this ).data("clicked")=="yes";
                     }).css('border','3px solid ' + YELLOW_COLOR);
        }
    }
    else
    {
        if (images_selected<5)
        {
            images_selected++;
            if(images_selected==1)
            {
                $(e).data("clicked","yes").css('border','3px solid ' YELLOW_COLOR);
            }
            else
            {
                $(e).data("clicked","yes").css('border','3px solid ' + BLACK_COLOR);
            }
        }
    }
};

必须有一个第一个图标,它将一直是黄色的。我想用顺序数组来做,它存储对象的顺序。问题是,我似乎无法从数组中调用对象并仍然保留它的css函数。

我在想:

var x=[];

inside image_click(e){..

在某个点存储对象:

    $(e).data("order",clicked_img);
    x[clicked_img]=e;

当我弹出它时:

    alert(x[clicked_img].data("order"));
...}

但是…看来我再也无法访问数据了。就像当对象离开jQuery领域时,它就失去了公民权利。我不知道如何访问它的数据变量

请帮助!谢谢!

保存的是DOM元素,而不是jQuery对象。应该是

x[clicked_img]=$(e);

x[clicked_img]=e;

就像当对象离开jQuery领域时,它已经失去了它的民事权利。

简单的解决方案:把它放回jQuery领域。您有几个选项:

x[clicked_img] = $(e);
// ...
alert(x[clicked_img].data("order"));

或:

x[clicked_img] = e;
// ...
alert($(x[clicked_img]).data("order"));

或:

x[clicked_img] = e; // assuming e is the DOM element, not the event
// ...
alert(x[clicked_img].dataset.order);

现在不建议使用后者,因为我不确定跨浏览器的含义,但无论如何,这是在"常规"JavaScript中实现的方法。

我建议第一种方法,在这种情况下,你也应该分配$(e)到一个变量在image_click的开始,所以它不会重建jQuery对象每次