这可能是非常明显的,但我会说实话,我不是任何一种开发者。只是有人试图为我工作的公司的客户工作。
我在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",
})
};
};
};
代码应该做什么(如果不清楚);
var c应该得到var b的位置(如果我是对的),允许我定位具有相对于它的var a的ID的元素......
我不知道为什么代码在循环内失败了。我似乎总是得到null错误,或者认为var b未定义?
我的猜测是我不能接受一个字符串(selectedrate_),向它添加一个数组字符串,然后将该结果用作ID。如果我使用alert(a)或alert(b),我确实得到了我需要的ID,但我无法知道如何在$(“#ID”)中使用它,例如......
我想我已经解释了一切。如果我错过任何东西,我会尝试更好地解释它。
答案 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"
}
});
};