【发布时间】:2014-09-22 23:15:10
【问题描述】:
有点奇怪的问题,但我不知道如何解决它。
在下面的代码中,我试图根据点击的行标题对表格的所有元素进行排序。
起始 HTML:
<table id="PracticeTable" class="col-md-10 col-md-offset-2">
<tr id="Column Names">
<td class="ClientID col-xs-1">Client ID</td>
<td class="ClientName col-xs-1">Client Name</td>
<td class="PracticeID col-xs-1">Practice</td>
</tr>
@for (int i = 0; i < ViewBag.ClientDatabase.getDatabase().Count; i++)
{
@:<tr class="DataRow">
<td class="ClientID col-xs-1" data-name="@ViewBag.ClientDatabase.getByIndex(i).Id">@ViewBag.ClientDatabase.getByIndex(i).Id</td>
<td class="ClientName col-md-2 col-xs-1" data-name="@ViewBag.ClientDatabase.getByIndex(i).getClientName">@ViewBag.ClientDatabase.getByIndex(i).getClientName</td>
<td class="PracticeIDs col-xs-1" data-name="@ViewBag.ClientDatabase.getByIndex(i).getPracticeID">@ViewBag.ClientDatabase.getByIndex(i).getPracticeID</td>
<td class="EditButtons col-xs-1" data-bind="visible: editVisible"><a href="~/Clients/Edit?clientId=@i">Edit</a></td>
@:</tr>
}
其中一种点击功能的示例:
jQuery(document).ready(function () {
$(".ClientName").click(function () {
alert("Name Clicked");
var clients = $(".DataRow");
var compareLine = $(clients).children(".ClientName");
compareLine.sort(function (a, b) {
var an = $(a).attr("data-name");
var bn = $(b).attr("data-name");
alert(an + " " + bn);
if (an > bn) {
return 1;
}
if (an < bn) {
return -1;
}
return 0;
});
compareLine.detach().appendTo(clients);
});
});
当我尝试附加上述行时,客户端名称中的名称出现在每一行中。有什么我想念的吗?我试图循环遍历 compareLine 中的数据以单独添加它们,但我无法弄清楚。
编辑:从未完全删除的修复尝试中删除重复代码。
【问题讨论】:
-
ID 不能包含空格,但您的
<tr>元素之一具有“列名称”。您应该将其替换为“columnNames”或不带空格的内容。 -
“根据点击的行对它们进行排序”是什么意思?
-
我绝对能看出问题所在。但是您是要对整行进行排序,还是将
td移到另一行? -
var compareLine = $(clients).children(".ClientName");应该是var compareLine = clients.children(".ClientName"); -
漏掉了一个单词大卫,应该是行标题。
标签: javascript jquery html html-table