我试图找出如果它们大于某个数字,如何更改所有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))
}
有什么想法吗?
答案 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));