排序HTML按部分文本选择

时间:2018-04-26 22:01:51

标签: javascript sorting select text partial

我需要根据文本中的连字符按部分文本对项目进行排序。 例如:

<select id="mySelect">
    <option value="1">Oranges - Box A - Deliver</option>
    <option value="2">Apples - Box A - Deliver</option>
    <option value="3">Bananas - Box B - Deliver</option>
</select>

我需要根据第一个连字符后面的文本对项目进行排序,然后按开头文本排序到第一个连字符。

排序后的结果如下所示:

<select id="mySelect">
    <option value="2">Apples - Box A - Deliver</option>
    <option value="1">Oranges - Box A - Deliver</option>
    <option value="3">Bananas - Box B - Deliver</option>
</select>

因此,它需要按Box名称排序,然后按水果排序。 我使用以下排序,但它使用全文。

function sortAllItems(listname) {
    var $r = $(listname + " option");
    $r.sort(function (a, b) {
        return (a.text).localeCompare(b.text);
    });
    $(listname).append($($r));
}

我确信有一些灵巧的方式可以找到连字符和子串的东西,但我还没有能够找到有用的东西。

有没有人不得不像以前那样做一些疯狂的事情?我很感激你的意见。谢谢!

2 个答案:

答案 0 :(得分:0)

子部件的重复排序应该有效:

$r.sort(function (a, b) {
    return (a.text.split(" - ")[1]).localeCompare(b.text.split(" - ")[1]);
});

$r.sort(function (a, b) {
    return (a.text.split(" - ")[0]).localeCompare(b.text.split(" - ")[0]);
});

答案 1 :(得分:0)

您可以使用以下回调

function (a, b) {
   return (a.text.split('-')[1]+a.text).localeCompare(b.text.split('-')[1]+b.text);
}

它基于以下证据:如果您按字母顺序对列表进行排序,并且同一个词在不同位置出现多次,则只有第一个词会生效。

所以:

Box A - Oranges - Box A - Deliver
Box A - Apples - Box A - Deliver
Box B - Bananas - Box B - Deliver

将按以下方式排序:

Box A - Oranges - Deliver
Box A - Apples - Deliver
Box B - Bananas - Deliver

我再次重复这个概念,如果同一个词出现在几个位置,只有第一个问题。