Search code examples
angularjsz-indexgetelementbyid

Set zIndex programmatically on a Div in AngularJS


I have a number of Div's on a layout, each of them draggable, so there's the possibility of the user dragging them into positions where they will overlap.

I want to set the most recently made visible div to have a z-index value that's +1 from the last, and for this I'm using a $scope.nextIndex variable that's incremented each time one of the div's is made visible.

Each div has its own variable to track its own z-index value: $scope.one_zIndex, $scope.two_zIndex, $scope.three_zIndex, and each correctly gets assigned an incrementally larger value as each div is shown, hidden and shown again.

Each div has its own class: one_z, two_z, three_z

What I can't make work is assigning the variable to the z-index style on the divs themselves via the controller.

    var myVar = document.getElementsByClassName("one_z");

If I log this to the console, I get what I expect - an array with one element [0]

    []
     0 : div#one_z
     length : 1
     one_z : div#one_z
    __proto__ : HTMLCollection

I would assume that I could set the z-index simply like this:

    myVar[0].style.zIndex = $scope.one_zIndex;

However this throws an error:

     Uncaught TypeError: Cannot set property 'zIndex' of undefined

What am I missing? Or is there a better way to accomplish this?


Solution

  • Here is a working plunker https://plnkr.co/edit/aaDipIWdqpajghc2F2Da?p=preview

    You can set zindex via ng-style:

    <div ng-style="{'z-index': $lastIndex;}">...</div>
    

    This example completely useless in your case, but there is an example of ng-style usage. In your case I'd set index as property of you div element data source.