【问题标题】:javascript sort of HTML elements in-place [closed]javascript就地HTML元素[关闭]
【发布时间】:2012-10-19 18:39:40
【问题描述】:

继续javascript sort of HTML elements

我想对不同<ol>中的元素进行排序(最终在<div>中) 排序最好是就地而不是unwrap(),sort()wrap

HTML

<ol class="table" style="display: block; ">
    <li class="menu__run">I</li>
    <li class="menu__run">IXX</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
</ol>
<ol class="table">
    <li class="menu__run">I</li>
    <li class="menu__run">IXX</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__test">st</li>
    <li class="menu__test">st</li>
    <li class="menu__test">st</li>
</ol>

javascript

var sort_by_name = function(a, b) {
    return a.innerHTML.toLowerCase().localeCompare(b.innerHTML.toLowerCase());
}

var list = $(".table > li").get();
list.sort(sort_by_name);
for (var i = 0; i < list.length; i++) {
    list[i].parentNode.appendChild(list[i]);
}​

我要找的结果是

<ol class="table" style="display: block; ">
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
</ol>
<ol class="table">
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">I</li>
    <li class="menu__run">IXX</li>
    <li class="menu__run">IXX</li>
    <li class="menu__test">st</li>
    <li class="menu__test">st</li>
    <li class="menu__test">st</li>
</ol>

设 a,b 为 DOM 元素,并且 a 在列表中的位置低于 b(在文档中的位置较低)并且 value(a) > value(b) 然后 a 和 b 将在文档中切换。不管 a 和 b 可能不是兄弟姐妹。

http://jsfiddle.net/yqd3w/7/

【问题讨论】:

  • 问题是什么?您有工作排序代码。您可以使用该类型的代码对任一列表进行排序。
  • 什么去哪儿之间有什么逻辑?似乎随机...
  • 如果我在 DOM 中查询来自不同父级的元素,我希望它们在它们之间进行排序。
  • “就地”是什么意思?
  • @Bergi,让 a,b 成为 DOM 元素,并且 a 在列表中的位置低于 b(在文档中的位置较低)并且 value(a) > value(b) 然后是 a 和 b将在文档中切换。不管 a 和 b 可能不是兄弟姐妹。

标签: javascript jquery sorting in-place


【解决方案1】:

要通过减少比较来加快任务速度,您可以这样做:

$(".table").each(function(){
    var list = $(this).children().get().sort(sort_by_name);
    for (var i = 0; i < list.length; i++)
        this.appendChild(list[i]);
}​);

...虽然不影响结果。


编辑:好的,我知道了:

var $t = $(".table");
var list = $t.children().get().sort(sort_by_name);
$t.map(function() {
    return {t:this, l:this.childNodes.length};
}).each(function(i, o) {
    $(o.t).append(list.splice(0, o.l));
});

【讨论】:

  • 在第一个table有一个带有IXX文本的元素,它需要移动到第二个table
  • 已更新。第二个代码做你想做的事
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多