2016-12-25 4 views
0

Wie bekomme ich den Index des gewählten Elements oder von 'Elems [i]' innerhalb des Javascript? Ich weiß, dass dies eine sehr einfache Frage ist, so dass alle Vorschläge zu einem Buch, das man kaufen oder nehmen kann, sehr geschätzt werden. Vielen Dank!Index von Javascript-Array erhalten

Code:

<html> 
<body> 
    <table> 
    <tr id="subject"><?php 
    $subjects = array("IT","Programming","Networks"); 
    foreach($subjects as $key => $value) { 
    echo "<td>"."<a href='index.php' class='column'>".$value."</a>"."</td>"; 
    }  
    ?></tr> 
    </table> 
</body> 


<script type="text/javascript"> 

    var elems = document.getElementsByClassName('column'); 
    for (var i = 0; i < elems.length; i++) { 
     elems[i].onclick = function() { 
      console.log(this.innerHTML); 
     }; 
    } 

</script> 
+1

Was genau ist ein "ausgewähltes Element"? Was versuchst du zu machen? – Dekel

+0

Suchst du das? https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

+0

Bitte definieren Sie "_the selected element_". Meinst du das Element, das gerade im Umlauf ist? Oder vielleicht das Element, auf das geklickt wurde? "GetElementsByClassName" gibt auch kein Array zurück, sondern gibt eine HTMLCollection zurück. – Teemu

Antwort

1
var elems = document.getElementsByClassName('column'); 
for (var i = 0; i < elems.length; i++) { 
let a=i;//the magic happens 
elems[i].onclick = function() { 
console.log(a); 
}; 
} 

See Verschlüsse lassen, ES6.

Option zwei (für älteren Browser):

 var elems = document.getElementsByClassName('column'); 
for (var i = 0; i < elems.length; i++) { 
(function(){ 
var a=i; 
elems[i].onclick = function() { 
console.log(a); 
}; 
})(); 
} 

Sie müssen den Index in den Handler Rahmen setzen, entweder Trog Block Scoping mit (lassen, erste Antwort) oder durch einen neuen Rahmen zu schaffen Trog ein IIFE ... (Sie benötigen einen eigenen Bereich für jeden Handler erstellen)

Lösung 3: setzte die dOM-Objekte ID:

elems[i].id=i; 
elems[i].onclick=function(){ 
    alert(this.id); 
}; 

Lösung 4: Den Index dynamisch abrufen:

alert(elems.indexOf(this)); 
+0

es druckt nur die Anzahl der Elemente innerhalb des Arrays. Ich möchte, dass der gewählte Index angezeigt wird. – Solomon

+0

@Solomon: nein. Es ist die Magie lassen ... –

+0

Lösung 3 schien für mich zu arbeiten. Danke für deine Hilfe!! – Solomon