Megtalálni a legközelebb, a korábbi elem konkrét adatok attribútum jquery

szavazat
46

Ezt már aggasztó számomra az eltelt néhány órában most.

Van egy asztal. Ezen belül a táblázat keresem a legközelebb, a korábbi táblázat sor a konkrét adatok attribútumot. Azért csinálom ezt a keresés után a sikeres alkalmazása jquery csoportosítható. Megpróbáltam szinte mindent, és mindig jön fel a rossz dolog.

Itt van, amit használok

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

Lényegében a változó „newIndex” állítólag megragad az új helyzetben a sor, miután válogatni, menuLevel állítólag megragad az adatokat attribútum „menüben szintű” a táblázat sor, és menuId megragadta egy másik adat tulajdonsága, hogy táblázatsor .

Ez kifejezetten keresi a legközelebbi, a korábbi menü-szintű attribútum a táblázat sorait. Tehát, ha egy sort a táblázatban a menü-szintű attribútum 2 mozgatjuk, akkor keresi a legközelebbi táblázatsorra a menü-szintű attribútum 1.

A teljes jquery rendezhető script én vagyok segítségével, ha szükséges

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

A kérdést 29/10/2013 06:35
felhasználó
Más nyelveken...                            


1 válasz

szavazat
2

.prevcsak akkor ad vissza azonnal előző elem, hogy nem folyamatosan keresi a legközelebbi elem, amely megfelel a választó. Használd .prevAll, hogy megtalálja az összes elemet illeszkedő szelektor, majd .first()keskeny le az elsőt, ami a legközelebbi. És ha azt szeretnénk, hogy keressen egy adott data-menu-leveltulajdonság, meg kell tenni, hogy a választó; amelyben .data("menu-level", 1) meghatározza az attribútum, nem keressük.

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);    
}
Válaszolt 29/10/2013 06:40
a forrás felhasználó

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