jQuery列表won't排序后追加
jQuery list won't sort after append
$(document).ready(function() {
$('#new-to-do-item').keyup(function(e) {
if (e.which === 13) {
var text = $(this).val();
var listItem = "<li><input type='checkbox'>" + text + "</li>"
$(listItem).appendTo('.list');
}
});
//sort
$(document).on('click', '#coolthings',function(){
$(".list li").sort(asc_sort).appendTo('.list');
//$("#debug").text("Output:");
// accending sort
function asc_sort(a, b){
return ($(b).text()) < ($(a).text()) ? 1 : -1;
}
});
我有一个最初由4个项目组成的列表,#coolthings是一个元素,当我点击时,将按字母顺序对这些项目进行排序,然而,keyup函数将新项目附加到列表中,#coolthings按钮将不会与新添加的项目一起对整个列表进行排序,它将按字母顺序对初始列表排序,然后按字母顺序添加新项目,使整个列表由两个字母顺序列表组成。我想知道我如何才能使它排序按钮将排序整个列表按字母顺序排序后,我添加了新的项目与keyup功能。
使用tinysort插件维护字符顺序:
http://jsfiddle.net/EJ9y7/3/请参考这里
而且排序函数可能需要一个更好的方法来排序提示
$(document).ready(function () {
$('#new-to-do-item').keyup(function (e) {
if (e.which === 13) {
var text = $(this).val();
var listItem = "<li><input type='checkbox'>" + text + "</li>";
$(listItem).appendTo('.list');
}
});
});
//sort
$(document).on('click', '#coolthings', function () {
var sorted = $(".list li").sort(asc_sort);
$(".list").append(sorted);
function asc_sort(a, b) {
return ($(b).text().toUpperCase()) < ($(a).text().toUpperCase()) ? 1 : -1;
}
});
不能对HTML元素进行排序,但需要先将它们分离(并在排序后重新附加)。
这将工作(见这里):
$(function(){
$('#new-to-do-item').keyup(function(e) {
console.log(e.which == 13);
if (e.which == 13) {
var text = $(this).val();
var listItem = "<li><input type='checkbox'>" + text + "</li>";
$(listItem).appendTo('.list');
$(this).val('');
}
});
$(document).on('click', '#coolthings',function(){
$(".list li").detach().sort(asc_sort).appendTo('.list');
function asc_sort(a, b){
return ($(b).text()) < ($(a).text()) ? 1 : -1;
}
});
});
问题是你排序只是javascript列表。你不排序html列表。这是因为$(".list li")
返回javascript表示<li>
节点。如果你想显示它,你必须重新排列html树。我认为最简单的方法是删除列表节点的内容并重新插入<li>
节点。
虽然muffle的解决方案有效,但detach()不是您的解决方案不起作用的原因。
我假设你的html看起来像这样
<ul class="list">
<li> <input type='checkbox'>hi</li>
<li> <input type='checkbox'>bi</li>
<li> <input type='checkbox'>zi</li>
<li> <input type='checkbox'>ai</li>
</ul>
实际上应该是这样的
<ul class="list">
<li><input type='checkbox'>hi</li>
<li><input type='checkbox'>bi</li>
<li><input type='checkbox'>zi</li>
<li><input type='checkbox'>ai</li>
</ul>
这个空格会导致初始硬编码元素总是按字母顺序排列在'a'之前。修复你的初始html或去掉空白将是解决方案。
查看你的HTML后,你的问题是大写优先于小写。您可能正在测试使用小写
相关文章:
- 表追加而不附加最后一个元素
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- Javascript排序字符串或数字
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 如何在jquery中停止在更改时追加值
- sort而不是排序javascript
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 如何合并不同集合的游标并按日期排序
- 为什么我的JavaScript堆栈排序函数不起作用
- 在文档就绪时追加DDL;不要让它在列表项上有CSS,而不让它们可排序
- jQuery列表won't排序后追加