Nalezení nejbližší, předchozí prvek s konkrétním atributem údaje jQuery

hlasů
46

To mě trápí za uplynulých několika hodinách teď.

Mám tabulku. V rámci této tabulce jsem hledal nejbližší, předchozí řádek tabulky s konkrétním atributem dat. Dělám tuto nabídku ihned po úspěšném využití jQuery sortable. Snažil jsem se skoro všechno a vždy přichází s špatnou věc.

Tady je to, co jsem pomocí

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

V podstatě je proměnná „newIndex“ má chytit novou pozici řádku po roztřídění, menuLevel má chytit atribut dat „menu-level“ v tomto řádku tabulky, a menuId se chytil další atribut datový daném řádku tabulky ,

Je speciálně hledá nejbližší, předchozí atribut menu úrovně v řádcích tabulky. Takže pokud se pohybuje řádek tabulky s atributem menu úrovně 2, vypadá to k nejbližšímu řádku tabulky s atributem menu úrovně 1.

Plné jquery sortable script jsem pomocí v případě potřeby

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

Položena 29/10/2013 v 06:35
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

.prevvrátí pouze bezprostředně předcházející element, to nevede hledá nejbližší prvek, který se shoduje s voličem. Použijte .prevAllnajít všechny prvky odpovídající volič, a pak použít .first()zúžit na první, která je nejblíže. A chcete-li hledat určitý data-menu-levelatribut, musíte dát, že v voliče; volá .data("menu-level", 1) sady atribut, nebude hledat to.

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);    
}
Odpovězeno 29/10/2013 v 06:40
zdroj uživatelem

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