1

こんばんは。わかりましたので、私はいくつかの s で
これを持っています<li>data-attribute

<li class="mix evento" data-mes="jan">

このページのすべての li からすべてを取得しdata-mes、それらを繰り返さずに select>option に追加する必要があります (data-mes基本的data-monthには であり、各 li は日付のあるイベントを表します)。

これは、美しいMixitUp プラグインを使用して Li を月ごとにフィルタリングするために使用されます( data-mes)

まあ、1つのデータ属性を取得するには、次のようにする必要があることを知っています

var month = $('#ulID li').data('mes');

しかし、それらを配列にフェッチする方法と、複数回発生した場合にそれらが繰り返されないようにする方法がわかりません。どんな助けでも大歓迎です..

編集: ここの作業コードhttp://bit.ly/16xI0yV「ordenar」の横にある白いボタンをクリックして、ソート機能をテストします

4

2 に答える 2

2

ここでデモを参照してください。すべての行は、以下のコメントで説明されています。

// gets all `data-mes` into an array
var months = $('#ulID li').map(function() { return $(this).data('mes'); }).get();
// remove repeated meses
months = months.filter(function(e, p) { return months.indexOf(e) == p; });

// sorts the months
var order = ['jan','fev','mar','abr','mai','jun','jul','ago','set','out','nov','dez'];
orderedMonths = months.sort(function(a,b){ return order.indexOf(a) - order.indexOf(b); });

// add them, ordered, to the <select> with id #selectMes
$.each(orderedMonths, function(_, v) {
    $('#selectMes').append($('<option>').val(v).text(v));
});
于 2013-06-25T21:00:43.317 に答える
2

次のようなものを使用できます。

<ul id="ulID">
    <li class="mix evento" data-mes="jan">Jan</li>
    <li class="mix evento" data-mes="feb">Feb</li>
    <!-- etc... -->
</ul>
<select></select>

JS:

var months = [], $select = $('select');
$('#ulID li').each(function () {
    var mes = $(this).data('mes');
    if ($.inArray(mes, months) === -1) {
        months.push(mes);
        $select.append('<option value="'+mes+'">'+mes+'</option>');
    }
});

これはすべての をループし、liそれらの属性をチェックしdata-mesます。新しい値が出現するたびに、months配列に追加されます。同じ値が 2 回処理されないように、すべての値がこの配列に対してチェックされます。

値が一意の場合、選択メニューに追加のオプションが追加されます。

ここで動作しています: http://jsfiddle.net/cns3b/

于 2013-06-25T21:04:58.023 に答える