2

这可能真的很明显,但老实说,我不是任何类型的开发人员。只是一个试图为我工作的公司的客户工作的人。

我在 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)
    • 创建一个名为 b 的变量“chosenrate_xxxx”(其中 xxxx 是数组中的 id)
    • 检查是否存在具有与变量 b 匹配的 ID 的元素,如果存在则编辑具有变量 a 的 ID 的元素的 css 属性

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

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

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

我想我已经解释了一切。如果我错过了什么,我会尝试更好地解释它。

4

4 回答 4

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那样,你需要#一开始。

于 2012-07-08T16:41:47.647 回答
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()
于 2012-07-08T16:42:59.480 回答
0

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

于 2012-07-08T16:45:38.527 回答
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"
        }
    });
};
于 2012-07-08T17:07:53.077 回答