我可以在jquery中使用连接的var + array_value作为选择器,即$(“#var + array_value”)

时间:2012-07-08 16:35:32

标签: javascript jquery arrays for-loop var

这可能是非常明显的,但我会说实话,我不是任何一种开发者。只是有人试图为我工作的公司的客户工作。

我在JS中定义了一个数组,我希望能够使用for循环在数组中的每个项目上运行一段代码。

如果我单独运行代码(即不在循环中),我知道它有效。一旦尝试将其置于循环中,它就会失败。我希望这里有人可以告诉我我做错了什么,为什么这是错的,以及我怎么做得对。 (我希望能够理解为什么/为什么我在做事情,因为在我看来,知道这些事情总是更好。)

我得到的JS / JQuery代码(有效)是;

var a = document.getElementById('roomthumb_2236');
var d = $("#chosenrate_2236").offset();

if ($('#chosenrate_2236').length) {
    a.style.visibility='visible';

    $("#roomthumb_2236").css({
        top: d.top -9 + "px",
        left: d.left + 560 + "px",
    })
};

这很好用(我知道有一个JS和JQuery的混搭,我可以稍后将其标准化。)

我尝试了很多'for'循环的变体,但它似乎并不想工作。这是我的'for'代码的最新版本;

var rooms_array = [2236, 2235]

var reposition = function (){
    document.getElementById('hidden_stuff').style.display="none";

    for (var i = 0; i < rooms_array.length; i++) {
        var a = "roomthumb_"+rooms_array[i];
        var b = "chosenrate_"+rooms_array[i];
        var c = "chosenrate_"+rooms_array[i].offset()

        if ($(b).length) {
            $(a).css({
                visibility:"visible",
                top: c.top -9 + "px",
                left: c.left + 560 + "px",
            })
        };
    };
};

代码应该做什么(如果不清楚);

  • 设置数组(这是动态创建的数据库中的id列表)
  • 隐藏div“hiddenstuff”(这很好)
  • 然后为数组中的每个id;
    • 创建一个变量'roomthumb_xxxx'(其中xxxx是数组中的id),名为
    • 创建一个变量'chosenrate_xxxx'(其中xxxx是数组中的id),名为b
    • 检查一个元素是否存在,其ID与变量b匹配,如果存在,则编辑ID为变量a的元素的css属性

var c应该得到var b的位置(如果我是对的),允许我定位具有相对于它的var a的ID的元素......

我不知道为什么代码在循环内失败了。我似乎总是得到null错误,或者认为var b未定义?

我的猜测是我不能接受一个字符串(selectedrate_),向它添加一个数组字符串,然后将该结果用作ID。如果我使用alert(a)或alert(b),我确实得到了我需要的ID,但我无法知道如何在$(“#ID”)中使用它,例如......

我想我已经解释了一切。如果我错过任何东西,我会尝试更好地解释它。

4 个答案:

答案 0 :(得分:3)

你可以尝试

var a = "#roomthumb_"+rooms_array[i]; // put # sign for id selector
var b = "#chosenrate_"+rooms_array[i];
var c = $("#chosenrate_"+rooms_array[i]).offset();

您也可以将var c写为:

var c = $(b).offset(); // where var b = "#chosenrate_"+rooms_array[i];

而不是您目前正在尝试的内容。

当您尝试指向id时,开始时需要#

答案 1 :(得分:0)

你是对的,你可以连接字符串来制作jQuery选择器。快速浏览后,我可以看到问题可能是c的价值。此外,你错过了选择器开头的哈希值。替换这个:

var c = $("chosenrate_" + rooms_array[i]).offset()

使用:

var a = "#roomthumb_" + rooms_array[i];
var b = "#chosenrate_" + rooms_array[i];
var c = $("#chosenrate_" + rooms_array[i]).offset()

答案 2 :(得分:0)

你在编写选择器时做错了。 根据您的问题$(“#var+array_value”)这应该是$(“#"+var+array_value)

答案 3 :(得分:0)

我认为类似于此代码的内容将为您完成这项工作:

// Your array with data.
var rooms_array = [2235, 2236, 2237, 2238];
var reposition = function (){
    // Hide whatever you need to hide.
    $('#hidden_stuff').attr('display', "none");
    // This is a jQuery function to iterate over arrays.
    $.each(rooms_array, function(key,value){
        // Create your "a" variable
        var a = '#roomthumb_'+value;  // roomthumb_2235  ; roomthumb_2236 ...
        var b = '#chosenrate_'+value; // chosenrate_2235 ; chosenrate_2236 ...

        // If b exists...
        if ($(b).length) {
            var c = $(b).offset(); // get the offset of "b"
            $(a).css({
                visibility:"visible",
                top: c.top -9 + "px",
                left: c.left + 560 + "px"
            })
        }
        // if "b" doesn't exist
        else {
            // edit the css properties of the element with the ID of variable "a"
        }
    });
};