Găsirea cel mai apropiat, elementul anterior cu specific jquery atribut de date

voturi
46

Acest lucru a fost mă frământă pentru câteva ore au trecut acum.

Am un tabel. , În cadrul tabelului I sunt în căutarea pentru cel mai apropiat, rândul tabelul anterior cu un atribut de date specifice. Fac această căutare imediat după o utilizare cu succes a Sortable jquery. Am încercat aproape totul și întotdeauna vine cu un lucru greșit.

Iată ce eu sunt, folosind

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

În esență, variabila „newIndex“ ar trebui să apuca noua poziție a rândului după ce au fost sortate, menuLevel ar trebui să apuca atributul de date „meniu-nivel“ al rândului de masă, și menuId este hapsân un alt atribut de date de pe acel rând de masă .

Se caută în mod special pentru cel mai apropiat, anterior atribut la nivel de meniu în rândurile din tabel. Deci, dacă un rând de tabel cu un atribut la nivel de meniu de 2 este deplasat, este în căutarea pentru cel mai apropiat rând de masă cu un atribut la nivel de meniu de 1.

Script-ul Sortable completă jquery Sunt folosind, dacă este necesar

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

Întrebat 29/10/2013 la 06:35
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

.prevreturnează numai elementul imediat anterior, aceasta nu ține în căutarea pentru cel mai apropiat element care se potrivește cu selectorul. Utilizați .prevAllpentru a găsi toate elementele se potrivesc cu un selector, și apoi utilizați .first()pentru a restrânge la prima, care este cel mai apropiat. Și dacă doriți să căutați un anumit data-menu-levelatribut, trebuie să puneți că în selectorul; de asteptare .data("menu-level", 1) seturi atributul, nu caută ea.

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);    
}
Publicat 29/10/2013 la 06:40
sursa de către utilizator

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