Das Finden das nächste, vorherige Element mit spezifischem Datenattribut jquery

stimmen
46

Dies wurde beunruhigend mich für die vergangenen paar Stunden jetzt.

Ich habe eine Tabelle. Innerhalb dieser Tabelle ich suche nach der nächsten, vorherige Tabellenzeile mit einem bestimmten Datenattribut. Ich mache diese Suche direkt nach einem erfolgreichen Einsatz von jQuery sortierbar. Ich habe fast alles versucht, und es kommt immer mit der falschen Sache auf.

Hier ist, was ich verwende

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

Im Wesentlichen wird die Variable „newIndex“ soll, nachdem die neue Position der Reihe greifen sortiert werden, wird menuLevel soll das Datenattribut „Menü-Ebene“ diese Tabellenzeile packen, und menuId ist ein weiteres Datenattribut dieser Tabellenzeile erregende .

Es ist speziell auf der Suche nach dem nächsten, vorherigen Attribute Menü-Ebene in den Tabellenzeilen. Also, wenn eine Tabellenzeile mit einem Menü-Ebene Attribute 2 bewegt wird, sieht es für die nächste Tabellenzeile mit einem Menü-Ebene Attribute 1.

Der vollständige jquery sortierbar Skript ich benutze, wenn nötig

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

Veröffentlicht am 29/10/2013 um 06:35
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

.prevnur gibt das unmittelbar vorhergehende Element, es nicht für das nächste Element sucht nicht halten, den die Wähler übereinstimmt. Verwenden Sie .prevAllalle Elemente zu finden , einen Selektor passend, und dann verwenden .first()sie zu verengen , um die erste nach unten, was der nächste ist. Und wenn Sie nach einem bestimmten suchen mögen data-menu-levelAttribut, müssen Sie , dass in dem Selektor setzen; Aufruf .data("menu-level", 1) setzt das Attribut, durchsucht , es nicht für sie.

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);    
}
Beantwortet am 29/10/2013 um 06:40
quelle vom benutzer

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