如果大于X,从所有div ID中减去“1”?

时间:2016-01-02 20:32:15

标签: javascript jquery

我试图找出如果它们大于某个数字,如何更改所有div的ID。

基本上我允许用户根据需要删除Div。所有div都是从零到ID的顺序ID,但是列中有很多div。如果用户有8个div,则ID将如下所示:

0
1
2
3
4
5
6
7

如果用户删除第三个div,则每个ID大于2的div应减1,以使其保持有序。

我以前设置过这样,应用程序会计算已删除div的数量,并将其考虑到依赖于div正常的其他代码,但是一个新功能使得hacky太可靠而无法正常工作。

我尝试过这样的事情,但它会为所有div ID返回NaN

if ($(".queueListDiv .track").attr("id") > deletedId){
  $(".queueListDiv .track").attr("id", ($(".queueListDiv .track").attr("id") - 1))
}

有什么想法吗?

7 个答案:

答案 0 :(得分:1)

这样的事情会起作用吗?

$(".queueListDiv .track").each(function () {
  var $el = $(this);
  var id = parseInt($el.attr("id"), 10);
  if (id > deletedId) {
    $el.attr("id", id - 1);
  }
});

答案 1 :(得分:1)

NaN表示而不是数字。您需要先解析正确的ID,然后才能正确执行。看看这个:

// loop through the tracks
$(".queueListDiv .track").each(function () {
  // current element
  var $this = $(this);
  // get the id in number form
  var id = parseInt(this.id, 10);
  // if it is greater, do
  if (id > deletedId) {
    // remove one and set it back
    $this.attr("id", id - 1);
  }
});

我建议你不要将ID值设置为纯数值。

答案 2 :(得分:1)

使用attr(attribute, function)循环遍历所有元素。在您的代码中,您不会检查特定实例

$(".queueListDiv .track").attr("id", function(idx, oldId){
    return +oldId > deletedId ? +oldId - 1 :  oldId;
});

答案 3 :(得分:0)

NaN表示“不是数字”,在您的情况下就是这种情况。您正在从字符串中减去一个数字。将ID号转换为parseInt(string, 10)的数字。 10表示十进制,应该添加以避免函数的奇怪行为。

答案 4 :(得分:0)

我建议保留元素的jQuery结果集,如。

var $collection = $();

然后每次创建一个,你都可以......

$collection.add($newJqueyObject);

因此,您不必查找它们。现在是第二部分。当你创建它们时,你可以做到

$newJqueryObject.data('numericId', value);

其中value是整数,而不是字符串。然后,当你想找到要改变的那些时,你可以做一个简单的过滤器。

$collection.filter(function(){ return $(this).data('numericId') > somevalue; });

我可能错过了一些东西,但你明白了。您还需要在删除这些集合时将其删除,以免它们徘徊。

答案 5 :(得分:0)

更简短的解决方案:

$(".queueListDiv .track").each(function (index, elemenet) {
  var id = parseInt(elemenet.id, 10);
  if (id > deletedId) {
    elemenet.id = id - 1;
  }
});

答案 6 :(得分:0)

另一个不涉及条件的解决方案。

$(".queueListDiv .track").attr("id", function(i, o) {
  return o - +(o > deletedId);
});

此代码返回
oldId - 0 if oldId > deletedID is false
oldId - 1 if oldId > deletedID is true

使用ECMAScript 6 arrow function的版本,由于浏览器兼容性差,我不建议使用该版本。只是为了很酷的语法显示它。

$(".queueListDiv .track").attr("id", (i, o) => o - +(o > deletedId));