【发布时间】:2021-04-28 00:50:11
【问题描述】:
有两个数组用于显示向文档附加元素的信息。它们是按升序打印的,但是在将它们全部组织起来时,我无法按数据属性单独组织它们。
此函数进行排序但不能混合不同的元素类:
$.fn.sortRaffles = function () {
this
.children()
.sort((a, b) => $(a).data("order") - $(b).data("order") || -1)
.appendTo(this);
return this;
}
$(".lista ul").sortRaffles();
在上面的代码之前,我使用字符串数组打印两个不同的元素类(avaibleRaffle 和 reservedRaffle)并过滤它们以显示正确的结果。
const nums = Array.from({ length: 11 }, (_, i) => `${i}`.padStart(3, "0"));
const customers = [
{ number: "002" },
{ number: "6003" },
{ number: "1010" },
{ number: "008,005,007,0002" }
];
const reserved_nums = nums.filter(
(s) => !customers.some((o) => o.number.includes(s))
);
const avaible_nums = nums.filter((s) =>
customers.some((o) => o.number.includes(s))
);
var avaibleRaffle = $();
$.each(avaible_nums, function (index, value) {
avaibleRaffle = avaibleRaffle.add(
'<span class="btn btn-success btn_reservas data-order="' +
value +
'" >' +
value +
"</span>"
);
});
$(".lista ul li").append(avaibleRaffle);
var reservedRaffle = $();
$.each(reserved_nums, function (index, value) {
reservedRaffle = reservedRaffle.add(
'<span class="btn btn-warning btn_pagos data-order="' +
value +
'" >' +
value +
"</span>"
);
});
$(".lista ul li").append(reservedRaffle);
一个最小可重现的例子:
/* eslint-env jquery */
const nums = Array.from({ length: 11 }, (_, i) => `${i}`.padStart(3, "0"));
const customers = [
{ number: "002" },
{ number: "6003" },
{ number: "1010" },
{ number: "008,005,007,0002" }
];
const reserved_nums = nums.filter(
(s) => !customers.some((o) => o.number.includes(s))
);
const avaible_nums = nums.filter((s) =>
customers.some((o) => o.number.includes(s))
);
var avaibleRaffle = $();
$.each(avaible_nums, function (index, value) {
avaibleRaffle = avaibleRaffle.add(
'<span class="btn btn-success btn_reservas data-order="' +
value +
'" >' +
value +
"</span>"
);
});
$(".lista ul li").append(avaibleRaffle);
var reservedRaffle = $();
$.each(reserved_nums, function (index, value) {
reservedRaffle = reservedRaffle.add(
'<span class="btn btn-warning btn_pagos data-order="' +
value +
'" >' +
value +
"</span>"
);
});
$(".lista ul li").append(reservedRaffle);
$.fn.sortRaffles = function () {
this.children()
.sort((a, b) => $(a).data("order") - $(b).data("order") || -1)
.appendTo(this);
return this;
};
$(".lista ul li span").sortRaffles();
console.log("Desired Order:", JSON.stringify(nums));
console.log("Avaible:", JSON.stringify(avaible_nums));
console.log("Reserved:", JSON.stringify(reserved_nums));
.lista ul li {
display: inline;
}
.lista ul li span {
border-radius: 50%;
width: 100%;
max-width: 40px;
height: auto;
margin: 3px;
padding: 6px;
}
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
<link
type="text/css"
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.3.1/semantic.css"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"
integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l"
crossorigin="anonymous"
/>
<link type="text/css" rel="stylesheet" href="src/styles.css" />
</head>
<body>
<div class="lista">
<ul>
<li>
<span></span>
</li>
</ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="src/index.js"></script>
</body>
</html>
【问题讨论】:
-
请在问题本身中添加minimal reproducible example(示例输入、预期输出、生成输出的规则)。
-
为什么是一个空的 jQuery 对象 (
var avaibleRaffle = $();) 而不是一个简单的数组? -
@Andreas 我更新了帖子以制作更简洁的代码。使用此 var 创建一个将接收特定数组并使用它来打印元素的变量,我应该只使用数组吗?此解决方案应进一步打印除数字之外的更多信息(如名称)
标签: javascript html jquery css custom-data-attribute