Trovare il, elemento precedente più vicino con particolare jQuery attributo data

voti
46

Questo mi è stato preoccupante per le poche ore passate ora.

Ho una tabella. In quel tavolo sto cercando il, precedente riga della tabella più vicino con un attributo dati specifici. Sto facendo questa ricerca subito dopo una corretta applicazione di jquery ordinabile. Ho provato quasi tutto e si arriva sempre con la cosa sbagliata.

Ecco quello che sto usando

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);    
}

Essenzialmente, la variabile NewIndex dovrebbe afferrare la nuova posizione della riga dopo essere filtrate, menuLevel dovrebbe afferrare dell'attributo menu di livello di tale riga della tabella, e menuId è afferrando un altro attributo di dati di tale riga della tabella .

E 'specificamente alla ricerca della, precedente attributo a livello di menu più vicino nelle righe della tabella. Quindi, se una riga di tabella con un attributo livello Menu di 2 viene spostato, che sta cercando la riga della tabella più vicino con un attributo livello Menu di 1.

Lo script ordinabili piena jquery sto usando, se necessario

$(#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

È pubblicato 29/10/2013 alle 06:35
dall'utente
In altre lingue...                            


1 risposte

voti
2

.prevrestituisce solo l'elemento immediatamente precedente, non continuare a cercare l'elemento più vicino che corrisponde al selettore. Utilizzare .prevAllper trovare tutti gli elementi che corrispondono a un selettore, e quindi utilizzare .first()per restringere verso il basso per il primo, che è il più vicino. E se si desidera cercare un determinato data-menu-levelattributo, devi mettere che nel selettore; chiamando .data("menu-level", 1) set l'attributo, non cerca per esso.

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);    
}
Risposto il 29/10/2013 a 06:40
fonte dall'utente

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