belirli bir veri niteliği jquery ile yakın bir önceki elemanı bulma

oy
46

Bu artık geçti birkaç saatliğine beni rahatsız olmuştur.

Ben bir tablo var. O masanın içinde ben belirli bir veri özniteliği ile yakın, önceki tablo satırının arıyorum. Birazdan jquery sıralanabilir başarılı bir kullanımdan sonra bu aramayı yapıyorum. Ben hemen hemen her şeyi denedim ve her zaman yanlış bir şey ile geliyor.

İşte ben kullanıyorum ne

var newIndex = ui.item.index();
var menuLevel = parseInt($(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-level));
var menuId = $(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-id);

if (menuLevel == 2) {
    var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,1).attr(data-menu-name);
    alert(findAboveRowName);    
}
if (menuLevel == 3) {
    var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,2).attr(data-menu-name);
    alert(findAboveRowName);    
}

Esasen, değişken newIndex sıralanmakta olan satırdan itibaren yeni konumunu kapmak gerekiyordu, menuLevel o tablo satırının veri niteliği menü düzeyinde kapmak gerekiyordu ve menuId o tablo satırının başka bir veri niteliği kapma .

Özellikle masa sıralar halinde en yakın önceki menü düzeyinde özellik için bakıyor. 2 'lik bir menü düzeyinde niteliğine sahip bir tablo satırı hareket ettiği takdirde Yani, 1 menü düzeyinde özniteliği ile yakın tablo satırının arıyor.

Gerekirse ben kullanıyorum tam jquery sıralanabilir komut

$(#sortable).sortable({
                update: function(event, ui) {
                    var serial = $('#sortable').sortable('serialize');
                    var newIndex = ui.item.index();
                    var menuLevel = parseInt($(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-level));
                    var menuId = $(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-id);
                    if (menuLevel == 2) {
                        var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,1).attr(data-menu-name);
                        alert(findAboveRowName);
                        // $.post(./menu-controller.php, { adjustParent: true, id: menuId, parent: findAboveRowName });
                    }
                    if (menuLevel == 3) {
                        var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,2).attr(data-menu-name);
                        alert(findAboveRowName);
                        // $.post(./menu-controller.php, { adjustParent: true, id: menuId, parent: findAboveRowName });
                    }
                    $.ajax({
                    url: ./menu-controller.php,
                    type: post,
                    data: serial,
                    success: function() {
                        $(#sortable).load(./menu-manager.php #menu-table, function() {
                            $.get('./menu-admin.js');
                        });
                },
                    error: function(){
                        alert(A problem occurred when moving this menu item. Please try again or contact support.);
                    }
                    });
                },
            handle:'.move-item',
            connectWith:'#menu-table',
            placeholder: highlight,
            containment: parent,
            revert: true,
            tolerance: pointer,
            items: 'tbody > *'
});

JSFIDDLE

Oluştur 29/10/2013 saat 06:35
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

.prevSadece seçici ile eşleşir yakın elemana aramaya devam etmez derhal önceki öğeyi döndürür. Kullan .prevAllbir seçicinin uyan tüm unsurları bulmak ve sonra kullanmak .first()en yakın ilki, bunu daraltmak için. Belirli bir aramak istiyorsanız data-menu-levelöznitelik, seçicinin o koymak zorunda; çağıran .data("menu-level", 1) setleri nitelik, bunun için aramaz.

if (menuLevel == 2) {
    var findAboveRowName = $(".menu-table-rows[data-menu-nesting='" + newIndex + "']").prevAll(".menu-table-rows[data-menu-level=1]").first().data("menu-name");
    alert(findAboveRowName);    
}
Cevap 29/10/2013 saat 06:40
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more