在Javascript来解决这一点,最好的方法是:
给这个Tr的..唯一的名称。例如:X_Y,X_Z,A_Y,A_Z
现在添加一个隐藏的标签或文本框,它给出了服务器的排序顺序ie当页面呈现我想排序它所有的Tr的ID都以A开头应该排在第一,所有的Z应该排在第二位。
<asp:label id="lblFirstSortOrder" runat="server" style="display:none;">A,X</label>
<asp:label id="lblSecondSortOrder" runat="server" style="display:none;">Z,Y</label>
当页面renders..the顺序应该是A_Z,A_Y,X_Z,X_Y
渲染这是来自aspx文件表之前:
<table>
<tr id='Tr_Heading'>
<td>A</td>
<td>B</td>
</tr>
<tr id="Tr_X_Y">
<td>GH</td>
<td>GH1</td>
</tr>
<tr id="tr_X_Z">
<td>HU</td>
<td>HU1</td>
</tr>
<tr id="tr_A_Z">
<td>JI</td>
<td>JI1</td>
</tr>
<tr id="tr_A_Y">
<td>JI</td>
<td>JI1</td>
</tr>
脚本:
function SortAndArrange()
{
var firstList = document.getElementById('lblFirstSortOrder').value;
var secondList = document.getElementById('lblSecondSortOrder').value;
var firstTypes = new Array();
firstTypes = firstList.split(',');
var secondLists = new Array();
secondLists = secondList.split(',');
var refNode = document.getElementById('Tbl_' + firstTypes[0] + "_" + secondTypes[0]);
for (var i = 0; i<firstTypes.length; i++)
{
for (var j = 0; j< secondTypes.length;j++)
{
var TrName = 'Tbl_'+firstTypes[i]+'_'+secondTypes[j];
var FirstSecondTrs = document.getElementById(TrName);
if (FirstSecondTrs)
{
FirstSecondTrs.parentNode.removeChild(FirstSecondTrs);
insertAfter(refNode,FirstSecondTrs);
refNode = FirstSecondTrs;
}
}
}
}
function insertAfter(referenceNode, newNode)
{
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}
我希望你们能明白我的意思..对我来说排序顺序总是来自服务器而不是来自用户的页面...
非常感谢所有的答案..赞赏它。帮助我找到这个解决方案。
谢谢, 本
来源
2009-05-02 16:13:23
Ben
这与C#有什么关系?至于在JS中的通用解决方案,它取决于你的意思是通用的(你举了一个例子,但没有说明它应该如何外推)。但是,一旦您了解JS DOM方法,这并不难。如果您仍然迷失,请提供您正在尝试实现的功能的签名,然后我们会尽力提供帮助。 – 2009-04-29 03:07:21
@Matthew因为这个问题意味着这与c#无关,我认为这可能是另一种情况,提问者只是用项目中使用的技术进行标记。我删除了C#标签。 – 2009-04-29 03:10:52
@Matthew和雷克斯... 我把它标记在c#下,不是因为项目,而是假设使用javascript的最大用户会使用C#。我只是想让这个问题达到更多的人。 我希望你明白我想说的是什么。 – Ben 2009-04-29 03:42:05