1

我需要一个循环的帮助......这可能很简单,但我很难编码。

基本上,我需要检查现有 ID 的编号,以便创建具有不同编号的唯一 ID。它们的命名如下: id="poly'+i'" 在我的函数中按顺序命名,其中 i 等于现有元素的数量。示例:Array 1、Array 2、Array 3 对应 i=1 用于创建 Array 1,i=2 用于 Array 2 等。

现在 i 基于现有元素的总数,并且我的“CreateNew”函数被驱动 x=i+1(所以上面的例子,新元素将被命名为 Array 4)。问题是如果您删除中间数字之一,“创建”功能将复制高数字。即数组1、2、3删除2,新建->数组1、3、3。

我需要一个 if() 语句来检查数组是否已经存在,然后一个 for() 循环遍历所有 i 直到它验证。不知道如何编码。

我要纠正的代码如下(注意我最初并没有写这个,我只是想用我最低限度的 JS 技能纠正它):

function NewPanel() {


  var i = numberOfPanels.toString();
  var x = (parseInt(i)+1).toString(); 


  $('#items').append('<div onclick="polygonNameSelected(event)" class="polygonName" id="poly'+i+'">&nbsp;&nbsp;Array '+ x +' &nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0)" onclick="removePolygon('+i+');return false;">&nbsp;&nbsp;&nbsp;</a></div>');
  $('div[id*=poly]').removeClass('selected');
  $('#poly'+i).addClass('selected');
  $('#poly'+i).click(function() {
    selectedPolygon = i;
    $('div[id*=poly]').removeClass('selected');
    $(this).addClass('selected');
  });

}

谢谢你!:)

4

2 回答 2

0

请澄清“问题是如果您删除中间数字之一,”。你说的删除是什么意思?无论如何,最简单的解决方案是创建两个数组。两个数组将具有相同的创建 ID。每当在第一个数组中创建一个 id 时,都会将一个 id 添加到第二个数组中。所以当它从第一个数组中删除时,检查你的第二个数组的最大值,然后在第一个数组中创建这个 id。我希望这没有让你感到困惑。

于 2012-06-13T23:00:06.447 回答
0

很难说为什么你不能把数组拼接起来。在我看来,跟踪元素编号涉及很多额外的逻辑。换句话说,除了索引相同之外,由于重叠的 1、3、3(来自示例),id 以及其他属性变得相同。如果不是这种情况,那么我的假设是不正确的。

基于这个假设,当我遇到想要确保创建的索引始终是附加索引的情况时,我通常采用与数据库主键相同的方法。我设置了一个字段:

var primaryKeyAutoInc = 0;

每次我“创建”或将元素添加到数据存储(在本例中为数组)时,我都会将键的当前值复制为它的索引,然后递增该primaryKeyAutoInc值。这允许我假设您要进行的保证唯一索引。而且,不仅删除不会影响以后的数据创建,保存的键索引可以用作访问器。

于 2012-06-13T23:00:46.603 回答