Im Beispiel Sie zur Verfügung gestellt, verwendete die jQuery-Plugin ist Nestable from dbushell . Haben Sie eine Kontrolle über das Plugin, das Sie am Ende verwenden werden? Das Projekt ist tot und wurde seit 2 Jahren nicht mehr aktualisiert.
Es könnte sinnvoll sein, nach einer Lösung zu suchen, die immer noch gewartet wird, und eine Funktion vorzuschlagen, die eine "protectRoot" -Funktion ist, die heutzutage in vielen Bibliotheken verwendet wird.
Wenn Sie keine Kontrolle über das Plugin haben, ist diese Funktion im Moment nicht implementiert und wird wahrscheinlich nie sein.
Wenn Sie Kontrolle über das Plugin haben, aber immer noch dieses verwenden möchten, könnte eine Lösung sein, eine Gabelung zu verwenden (es gibt viele, da das Projekt tot ist), die immer noch verwaltet wird und über diese Funktion verfügt.
Eine andere Lösung wäre, wählen Sie selbst Code, der Sie interessiert sind in den vielen pull requests eingereicht, aber das Projekt wird nie zusammengeführt werden.
Zum Beispiel dieses pull request neue Rückrufe hinzufügen statt dem nur eines zur Zeit zur Verfügung: beforeDragStart
, dragStart
, dragMove
, beforeDragEnd
, dragEnd
etc. bietet diese neuen Rückrufe viele Argumente wie der Artikel, die Sie gerade bewegt, wo Es war bevor du angefangen hast es zu ziehen und das Ziel. Basierend auf diesen neuen Informationen und insbesondere dem Ziel, können Sie das Ziehen abbrechen, wenn das Ziel ein Wurzelknoten ist.
$('.dd').nestable({})
.on('dragMove', function(event, item, source, destination) {
// item: item we're moving.
// source: original source of the item.
// destination: new position of the item.
});
Eine weitere Pull-Anforderung, das könnte Ihre Bedürfnisse entspricht ist this one. Es bietet einen Rückruf, um ein bestimmtes Ziehereignis abzulehnen. Sie könnten beispielsweise ein Ziehereignis ablehnen, wenn das gezogene Element ein Stammelement wird.
$('.dd').nestable({
reject: [
{
rule: function() {
// $(this) refers to the dragged element.
// Return TRUE to cancel the drag action.
return $(this).parent().hasClass("rootList");
}
}
]
});
genau mein Fall. –