javascript - Ändra platsen på ett DOM-element i AngularJS
Jag har för närvarande en Angular-direktiv som fungerar på liknande sätt som en karusell. För att hålla antalet DOM-element nere tar jag bort element från DOM och återinfogar dem. Jag använder för närvarande angular.element för att välja, ta bort och infoga nya objekt på följande sätt:
app.directive('myDirective', function(){
return{
link: function(scope, elem){
var jqLite = angular.element;
var parentElement = jqLite(elem[0].queryselector('.parent'));
// Selection..
var oldElement = jqLite(elem[0].queryselector('.oldItem'));
var newElement = jqLite('<div class=".newItem">Content here</div>');
oldElement.remove();
parentElement.append(newElement);
}
}
});
I princip hittar den här koden oldElement och tar bort det och skapar newElement och lägger till det i föräldrakontainerelementet. I princip vill jag veta om det är möjligt att flytta oldElement till en ny plats istället för att ta bort och skapa ett helt nytt element?
Svar #1
Detta är exakt hur append fungerar (Node.prototype.appendChild). Det flyttar elementet till en ny plats om det redan finns i DOM-trädet, eller skapar ett nytt element och infogar det i DOM om det ännu inte finns där.
I ditt fall:
app.directive('myDirective', function(){
return{
link: function(scope, elem) {
var jqLite = angular.element;
var parentElement = jqLite(elem[0].querySelector('.parent'));
var oldElement = jqLite(elem[0].querySelector('.oldItem'));
parentElement.append(oldElement);
}
}
});
eller snarare, eftersom du inte behöver jQuery/jqLite) för ett så enkelt DOM-trick:
link: function(scope, elem){
var parentElement = elem[0].querySelector('.parent');
var oldElement = elem[0].querySelector('.oldItem');
parentElement.appendChild(oldElement);
}
