0

Ich versuche, den Index des angeklickten Elements zu erhalten, aber ich bekomme -1 in der Konsole. Ich verwende Array.prototype die indexOf vom nodelistErhalte den Index des Klickelements

HTML zu erhalten:

<div ng-app='app' ng-controller='mainCtrl'> 
    <div app-click=""> 
    <div ng-repeat="json in myJson"> 
     <li>{{json}}</li> 
    </div> 
    </div> 
</div> 

JS:

.directive('appClick', function() { 
    return { 
    restrict: 'A', 
    scope: true, 
    controller: function($scope, $element) { 
     $element.bind("click",function(e){ 
      var index = Array.prototype.indexOf.call($element.children(), e.target); 
      console.log(index); 
     }); 
    } 
    } 
}); 

JSFiddle Demo

Antwort

4

Andere Möglichkeit ist, den Index zu setzen

<div ng-app='app' ng-controller='mainCtrl'> 
    <div app-click=""> 
    <div ng-repeat="json in myJson"> 
     <li data-index="{{$index}}">{{json}}</li> 
    </div> 
    </div> 
</div> 

und es in dem Klick

e.target.dataset.index 
+0

Hätte darüber nachdenken sollen! Vielen Dank. – user4756836

+0

Dies hat ein anderes Verhalten auf Tastendruck. Wenn ich will, dass die Eingabetaste das selbe Verhalten wie der Klick hat ... Ich bekomme undefiniert, wenn ich die Eingabe drücke, aber das richtige e.target, wenn ich klicke – user4756836

+0

Wie hat ein li ein Tastendruck? – epascarello

2

e.target return li Element, $ element.children () zurückgeben div Liste li
versuchen diesen Code:

var index = Array.prototype.indexOf.call($element.find("li"), e.target); 

angular.module('app', []).controller('mainCtrl', function($scope) { 
 
    $scope.myJson = ["mayank1", "mayank2", "mayank3", "mayank4", "mayank5", "mayank6", "mayank7", "mayank8", "mayank9"] 
 
}) 
 

 
.directive('appClick', function() { 
 
    return { 
 
    restrict: 'A', 
 
    scope: true, 
 
    controller: function($scope, $element) { 
 
     $element.bind("click",function(e){ 
 
     \t \t var index = Array.prototype.indexOf.call($element.find("li"), e.target); 
 
      console.log(index); 
 
     }); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script> 
 
<div ng-app='app' ng-controller='mainCtrl'> 
 
    <div app-click=""> 
 
    <div ng-repeat="json in myJson"> 
 
     <li>{{json}}</li> 
 
    </div> 
 
    </div> 
 
</div>

+0

Eine Frage zu lesen. Was ist, wenn ich mehrere li's habe und mit liste1 zu einer bestimmten li gehen will? – user4756836

+0

Und auch ... kannst du erklären, warum $ element.children() nicht funktioniert? – user4756836

+0

Sie können '.find (" li [class = 'list1'] ")' verwenden, um das Element zu finden –

-1

Können Sie das näher erläutern, was Sie versuchen zu tun? Es ist fast sicher, dass es einen besseren Weg gibt, es zu erreichen, wenn man es so sieht, wie man es entworfen hat.

+0

Was ist der bessere Weg? versuche nur den index des click elements in meine direktive zu bekommen – user4756836

Verwandte Themen