【问题标题】:Organising a list by ids based on an array - jQuery/JS基于数组的 ids 组织列表 - jQuery/JS
【发布时间】:2017-10-07 22:59:37
【问题描述】:

我有一个用 li 动态创建的 ul,我必须按照某个任意顺序进行组织。

这是生成的 HTML 示例:

<ul id="myUl">
    <li id="myId_15" class="myId_class">A list item</li>
    <li id="myId_264" class="myId_class">Another list item</li>
    <li id="myId_573" class="myId_class">Yet another list item</li>
</ul>

这是迄今为止我为这部分管理的 jQuery:

var slicedCompIds = ["15","573","264"];

$.each(slicedCompIds, function(i){
        $('#myUl').append($('#myUl li').attr('id', 'myId_' + slicedCompIds[i]));
})

目标是使用“slicedCompIds”数组中的顺序按 id 重新组织或排序列表。它不会按数字升序排列,而且很可能是随机的。

目前我的代码正在生成这个:

<ul id="myUl">
    <li id="myId_264" class="myId_class">A list item</li>
    <li id="myId_264" class="myId_class">Another list item</li>
    <li id="myId_264" class="myId_class">Yet another list item</li>
</ul>

它保持相同的顺序,只是将 id 替换为“slicedCompIds”数组中的最后一个 id。

我真的很难理解我必须申请这部分的逻辑,因此我为什么要征求意见。谁能指出我正确的方向?

谢谢!

【问题讨论】:

  • 那是因为 append 只在下一个堆栈循环中执行。在此之前完成迭代并将 id 的值设置为数组中的最后一个值。
  • 我不知道,谢谢!

标签: javascript jquery arrays list sorting


【解决方案1】:

您的代码存在问题,因为在 append() 调用中,您获取了所有 li 元素,然后更改了第一个元素的 id 属性,然后将它们附加回原来的位置。

要修改逻辑以执行您需要的操作,您需要根据数组中的值通过 id 单独选择每个元素,然后 append() 仅选择该元素。试试这个:

var slicedCompIds = ["15","573","264"];

slicedCompIds.forEach(function(value, i){
  $('#myUl').append($('#myId_' + value));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="myUl">
    <li id="myId_15" class="myId_class">A list item</li>
    <li id="myId_264" class="myId_class">Another list item</li>
    <li id="myId_573" class="myId_class">Yet another list item</li>
</ul>

【讨论】:

  • 谢谢,就是这样!呃,我感觉很愚蠢,感觉就像一个星期一的早晨。我会接受你的回答,显然只是冷却时间。
  • 没问题,很高兴为您提供帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2014-03-17
  • 2017-02-15
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多