W przykładzie który podałeś, plugin jQuery stosowany jest Nestable from dbushell . Czy masz kontrolę nad wtyczką, z której będziesz korzystać? Projekt jest całkowicie martwy i nie był aktualizowany od 2 lat.
To może być mądre, aby sprawdzić, czy nadal istnieje rozwiązanie i zaproponować funkcję, która jest w zasadzie funkcją "protectRoot", którą ma obecnie wiele bibliotek.
Jeśli nie masz kontroli nad wtyczką, ta funkcja w tej chwili nie jest zaimplementowana i prawdopodobnie nigdy nie będzie.
Jeśli masz kontrolę nad wtyczką, ale nadal chcesz skorzystać z tej, rozwiązaniem może być użycie widelca (jest wiele, ponieważ projekt jest martwy), który jest nadal utrzymywany i ma tę funkcję.
Innym rozwiązaniem byłoby wybrać kod, który Cię interesuje, z wielu zgłoszonych do projektu pull requests, ale nigdy nie zostanie on scalony.
Na przykład ten pull request dodawać nowe wywołania zwrotne zamiast jedynego dostępnego w danej chwili: beforeDragStart
, dragStart
, dragMove
, beforeDragEnd
, dragEnd
itd Te nowe wywołania zwrotne zapewnia wiele argumentów typu elementu, który aktualnie ruchomego, gdzie to było zanim zacząłeś ciągnąć to i miejsce przeznaczenia. Na podstawie tych nowych informacji, a zwłaszcza miejsca docelowego, można anulować przeciąganie, jeśli miejsce docelowe jest węzłem głównym.
$('.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.
});
Kolejna prośba przyciąganie, które mogłyby odpowiada Twoim potrzebom jest this one. Zapewnia wywołanie zwrotne w celu odrzucenia określonego zdarzenia przeciągania, można na przykład odrzucić zdarzenie przeciągania, jeśli element, który jest przeciągany, staje się elementem głównym.
$('.dd').nestable({
reject: [
{
rule: function() {
// $(this) refers to the dragged element.
// Return TRUE to cancel the drag action.
return $(this).parent().hasClass("rootList");
}
}
]
});
dokładnie mój przypadek. –