Hakuna matata!
function( e ) {
Es ergibt wenig Sinn die Funktion als Event-Handler zu registrieren, weil dann der Rückgabewert einfach verloren ginge. Es besteht auch kein Grund die Funktion so zu schreiben, dass sie nur mit Event-Objekten arbeitet, sie könnte viel allgemeiner für HTMLElemente geschrieben werden, dadurch wäre sie häufiger wiederverwendbar.
> var e = e || window.event;
> [/code]
Das kann man sich in modernen Browsern sparen.
> ~~~javascript
> var target = e.target || e.srcElement;
>
Das auch.
var p = target.parentElement;
var c = p.children;
Variablen sollten ausssagekräftige Bezeichner haben, 50 Zeilen später im Quelltext, weiß niemand man mehr wofür e, c und p eigentlich stehen.
> ~~~javascript
> for ( var i = 0; i < c.length; i++ ) {
>
> var btn = c[ i ];
>
> if ( btn === target ) {
>
> return i;
>
> break;
>
> }
>
> }
>
> }
JavaScript hat eine eingebaute indexOf()-Methode für Arrays, die genau das macht, was du hier mühsam mit der Schleife nachbastelst. Eine NodeList ist leider kein Array, weshalb man einen kleinen Trick anwenden muss, um indexOf() trotzdem verwenden zu können.
Der gesamte Code vereinfacht:
function getElementsIndex ( element ) {
var siblings = element.parent.children;
return [].indexOf.call( siblings, element );
}
--
“All right, then, I'll go to hell.” – Huck Finn
“All right, then, I'll go to hell.” – Huck Finn