我需要以这种格式对元素列表进行排序
<table width='a number' bord ...>
<tbody>
<tr>
header data
</tr>
<tr>
<td style='asdasdas' class='asdasdasd' ...>
rob
</td
<td style='asdasdas' class='asdasdasd' ...>
mike
</td>
</tr>
<tr>
<td style='asdasdas' class='asdasdasd' ...>
chuck
</td>
<td style='asdasdas' class='asdasdasd' ...>
kev
</td>
</tr>
</tbody>
我需要能够使用列表,以便人们可以按字母顺序排列名称,我无法理解如何执行此操作
答案 0 :(得分:2)
简单方法:
答案 1 :(得分:2)
这是一个简单的javascript函数,它将对任何标记元素集进行排序:
function sortElements(parentId, tagClass) {
var itemsToSort, p = document.getElementById(parentId);
if (p.getElementsByClassName) {
itemsToSort = p.getElementsByClassName(tagClass);
} else {
itemsToSort = getElementsByClassName(tagClass, "*", p);
}
// get all data into a sortable array
var data = [], order = [], item, placeHolder, i;
for (i = 0; i < itemsToSort.length; i++) {
item = itemsToSort[i];
// save position of item by inserting a placeholder right before it
placeHolder = document.createElement(item.tagName);
item.parentNode.insertBefore(placeHolder, item);
order.push(placeHolder);
// save item and text
data.push({obj: item, text: strTrim(item.innerHTML)});
}
// sort the item array by the text
data.sort(function(a, b) {
return(a.text.localeCompare(b.text));
});
// now reinsert items in sorted order
for (i = 0; i < data.length; i++) {
item = data[i].obj;
placeHolder = order[i];
// insert in new location
placeHolder.parentNode.insertBefore(item, placeHolder);
// remove placeholder
placeHolder.parentNode.removeChild(placeHolder);
}
}
function strTrim(str) {
return(str.replace(/^\s+/, "").replace(/\s+$/, ""));
}
// replacement for older versions of IE
function getElementsByClassName(className, tag, elm){
var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i=0; i<length; i++){
current = elements[i];
if(testClass.test(current.className)){
returnElements.push(current);
}
}
return returnElements;
}
你可以在这里看到它:http://jsfiddle.net/jfriend00/EztNw/。这个演示显示它对OP的表格单元格和一个有序列表进行排序,以显示该函数适用于任何元素集。
我所知道的唯一限制是标记的元素不能是其他标记元素的子元素。适用于表格中的单元格。
这也使用getElementsByClassName()
所以如果需要旧版本的IE,那么将添加替换/垫片(包含在jsFiddle中)。
以下是其工作原理:
答案 2 :(得分:1)
假设您只想使用Javascript
执行此操作 var names = ["rob", "mike", "chuck", "kev" };
names.sort(); //gives you an array with [chuck, kev, mike, rob]
您的桌子作为对象
var table = "<table width='a number' bord ...>" +
"<tbody>" +
"<tr>" +
"header data" +
"</tr>"
"<tr>" +
"<td style='asdasdas' class='asdasdasd' ...>" +
names[0] +
"</td>" +
"<td style='asdasdas' class='asdasdasd' ...>" +
names[1] +
"</td>" +
"</tr>" +
"<tr>" +
"<td style='asdasdas' class='asdasdasd' ...>" +
names[2] +
"</td>" +
"<td style='asdasdas' class='asdasdasd' ...>" +
names[3] +
"</td>" +
"</tr>" +
"</tbody>";
在任意位置插入表格对象。插件可能会膨胀,对于像这样简单的事情可能会有点过分。但是,如果您有选项我建议使用此服务器端而不是客户端,因为这将消除对跨浏览器支持的需要,并确保用户无法禁用闪亮的新按字母顺序排序的表。
答案 3 :(得分:-1)
我也使用jQuery实现了一个解决方案。看看:
<强> HTML:强>
<table id="dataTable">
<tbody>
<tr>
<td class="firstName">
foo
</td>
<td class="lastName">
bar
</td>
</tr>
<tr>
<td class="firstName">
rob
</td>
<td class="lastName">
mike
</td>
</tr>
<tr>
<td class="firstName">
chuck
</td>
<td class="lastName">
norris
</td>
</tr>
</tbody>
</table>
<input id="sortByFirstName" type="button" value="Sort By First Name"/>
<br/>
<input id="sortByLastName" type="button" value="Sort By Last Name"/>
<强> JavaScript的:强>
function sortByCellValue( tableId, sortBy ) {
var rows = $( "#" + tableId + " tbody tr" );
var structuredRows = [];
// extract all row data
rows.each(function( index, item ) {
var data = $(item).children().filter("td[class='" + sortBy + "']").html().trim();
structuredRows.push({
useToSort: data,
row: item
});
});
// sorting the rows
structuredRows.sort(function( a, b ){
var va = a.useToSort;
var vb = b.useToSort;
if ( va < vb ) {
return -1;
} else if ( va > vb ) {
return 1;
} else {
return 0;
}
});
// cleaning the tbody and inserting the rows in order
var tBody = $( "#" + tableId + " tbody" );
tBody.html( "" );
for ( var i in structuredRows ) {
tBody.append( structuredRows[i].row );
}
}
$(function(){
$( "#sortByFirstName" ).click( function(){
sortByCellValue( "dataTable", "firstName" );
});
$( "#sortByLastName" ).click( function(){
sortByCellValue( "dataTable", "lastName" );
});
});
这里可以看到jsFiddle:http://jsfiddle.net/UTTz8/
答案 4 :(得分:-2)
我不想手动执行此操作,因为有可用于您尝试执行的插件。其中一些被证明工作得很好并且支持很好。我只使用this