Jquery 在订单更改后获取行索引

Jquery 在订单更改后获取行索引,jquery,Jquery,我有一个html表,看起来像这样 这只传递来自表行的alid属性值,但不知何故,我还需要传递新的表行顺序。有人知道怎么才能做到这一点吗此.rowIndex似乎不起作用 编辑: 我尝试了Jasper的解决方案,但它并不是我想要的全部(但是很好的一半)。参见上面的示例,id属性表示数据库记录的唯一id。更改表行的顺序时,需要将数据库id与新位置相匹配 所以在一开始,我的输出编码是 61|52|23|44 id 6 == row 1 id 5 == row 2 id 2 == row 3 id 4

我有一个html表,看起来像这样

这只传递来自表行的al
id属性值,但不知何故,我还需要传递新的表行顺序。有人知道怎么才能做到这一点吗
此.rowIndex
似乎不起作用

编辑:

我尝试了Jasper的解决方案,但它并不是我想要的全部(但是很好的一半)。参见上面的示例,
id属性
表示数据库记录的唯一id。更改表行的顺序时,需要将数据库id与新位置相匹配

所以在一开始,我的输出编码是

61|52|23|44
id 6 == row 1
id 5 == row 2
id 2 == row 3
id 4 == row 4
假设我切换id 5和2的位置,我希望我的输出如下:


61|22|53|44
id 6 == row 1
id 2 == row 2
id 5 == row 3
id 4 == row 4
希望这句话能说清楚:)

谢谢你的帮助

code>
的子节点应该为您提供所需内容的数组。或.children(),但您更喜欢遍历DOM。

$('#saveOrder')。单击(函数(e){
$('#saveOrder').click(function (e) {
    e.preventDefault();
    var $TRs = $('#eventTable').find('tr[id]'),//this only selects TR elements that have an ID attribute
        out  = [];
    for (var i = 0, len = $TRs.length; i < len; i++) {
        out.push($TRs.eq(i).attr('id'));
    }
    //now the ids are in order from top to bottom and stored in an array (`out`)
    window.location.href = $(this).attr("href") + "&sort=" + out.join('|');
});
e、 预防默认值(); var$TRs=$('#eventTable').find('tr[id]'),//这只选择具有id属性的tr元素 out=[]; 对于(变量i=0,len=$TRs.length;i
下面是一个演示:

另一方面,您的ID无效;它们不应该以数字开头。下面是一篇关于如何在HTML中创建有效id属性的精彩文章:

您只需将
id
属性更改为
data id
,这是有效的HTML5代码。

尝试以下操作:

var t = "";
var tarr = []; // temp array
$("#eventTable tr").each(function(){ 
    t = this.attr("id") || ""; 
    tarr.push(t);
}); 
t = tarr.join("_");
window.location.href = $(this).attr("href")+"&sort="+t;

现在,您的新位置将包含一个查询字符串变量
sort
,该变量按顺序等于所有表行ID,用下划线分隔。

您必须小心,因为即使您这样对表进行编码:
某些浏览器将添加一个
作为
元素的父元素。因此,为了安全地针对
元素,您应该使用
$('table')。find('tr')
(不是
.children()
)很好的调用。find()无论如何会更简洁。我知道它无效,但它是针对后端系统的,所以(在这一点上)我并不真正关心验证(a)这是我的荣幸later@Maurice只是要小心,因为当您使用这样的通用ID来存储数据时,您可能会意外地遇到具有重复ID的情况。使用
数据属性
是很好的习惯做法。我测试了你的代码,但这不是我想要的。我需要知道id元素在表行中的位置。看看我现在想知道当我把元素ID 5放下来时它得到了什么顺序(当它在位置2开始时应该是3)@Maurice如果我理解正确,那么你想把TR的索引添加到同一TR的ID中,你可以通过在
for
循环中把索引添加到ID中:
out.push($TRs.eq(I).attr('ID')+(1+I)); 。这是一个演示:。这看起来很奇怪,因为根据输出中ID的索引,这些信息本质上是已知的(
61 | 52 | 23 | 44
,如果你使用
6 | 5 | 2 | 4
,那么你就知道ID
2
在第三个索引处)…我想我在这里疯了,完全失去了逻辑!但是,你的解决方案有效!提前谢谢!!

61|22|53|44
id 6 == row 1
id 2 == row 2
id 5 == row 3
id 4 == row 4
$('#saveOrder').click(function (e) {
    e.preventDefault();
    var $TRs = $('#eventTable').find('tr[id]'),//this only selects TR elements that have an ID attribute
        out  = [];
    for (var i = 0, len = $TRs.length; i < len; i++) {
        out.push($TRs.eq(i).attr('id'));
    }
    //now the ids are in order from top to bottom and stored in an array (`out`)
    window.location.href = $(this).attr("href") + "&sort=" + out.join('|');
});
var t = "";
var tarr = []; // temp array
$("#eventTable tr").each(function(){ 
    t = this.attr("id") || ""; 
    tarr.push(t);
}); 
t = tarr.join("_");
window.location.href = $(this).attr("href")+"&sort="+t;