2017-12-31 16 views
0

-Code geben:Iterieren durch Array nicht ordnungsgemäßes Ergebnis

var links = document.getElementsByTagName('link'); 
var links_length = links.length; 

for (var i = 0; i < links_length; i++) 
{ 
    if (links[i].getAttribute('rel').indexOf('test') !== -1) 
    { 
     //blabla 
     // but now I want to target for example... HREF attribute of link that got test in it's rel attribute... so 

     if (links[i].getAttribute('href').indexOf('test2') !== -1) 
     { 
      //blabla2 

      // but it doesn't work 
      // it won't give me href with test2 of the link with rel attribute with test. The code give my last link with href of test2... dunno why. Any ideas? 
     } 
    } 
} 

Warum bei rel='test' und href='test2' entsprechenden Link bekommen kann ich nicht? Die href Attribut-Iteration sollte nur auf die Links mit rel='test' zielen, richtig?

HTML:

<a href="test2" rel="test">Proper Test</a> // I want to grab this one 
<a href="testing" rel="testing">Test</a> 
<a href="testing" rel="testing">Test</a> 
<a href="test2" rel="besting">Test</a> 
<a href="testing" rel="test">Test</a> 
+0

'links' variable Halte' length', 'wird links_length' nicht deklariert. Könnten Sie Ihren Code bitte noch einmal überprüfen? –

+0

bitte teilen Sie die HTML – brk

+0

getan, es könnte jeder HTML mit Links, nur Quelltext etwas im Netz sein. – innertest

Antwort

0

von auf Ihre Kommentare suchen, ich nehme an, Sie mit Javascript-Verschluss stecken. Durch diese Schleife ist einfach genug, Sie müssen nur brechen, wo Sie die Bedingungen erfüllt haben.

var links = document.getElementsByTagName('link'); 
 
var mylink = ''; 
 

 
for (var i = 0; i < links.length; i++) 
 
{ 
 
    if (links[i].getAttribute('rel').indexOf('test') !== -1) 
 
    { 
 
     if (links[i].getAttribute('href').indexOf('test2') !== -1) 
 
     { 
 
      mylink = links[i]; 
 
      break; //If you need the first one. else create an array and keep pushing the ietms. 
 
     } 
 
    } 
 
} 
 

 
console.log(mylink);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="test" href="www.test2.com"> 
 
<link rel="test1" href="www.test2.com"> 
 
<link rel="test2" href="www.test2.com"> 
 
<link rel="test3" href="www.test2.com">

+0

danke, ich muss näher auf Schließungen, denke ich. – innertest

+0

@innertest nicht für Sie nicht. Closures beziehen sich auf Funktionsaufrufe. Die tatsächliche Antwort ist, dass Sie den falschen Tag-Namen verwendet haben. – traktor53

0

einige js Fehler behoben und Annahmen über den HTML-Code. Führen Sie einfach eine schrittweise Fehlerbehebung durch, indem Sie console.log, alert oder den Konsolen-Debugger verwenden.

var links = document.getElementsByTagName('a'); 
 

 
for (var i = 0; i < links.length; i++) { 
 
    if (links[i].getAttribute('rel') == 'test') { 
 

 
    if (links[i].getAttribute('href') == 'test2') { 
 

 
     console.log("link index:" + i); 
 

 
    } 
 
    } 
 
}
<a href="test2" rel="test">Test</a> 
 
<a href="best" rel="testing">Test</a> 
 
<a href="thetest2" rel="testing">Test</a> 
 
<a href="test2" rel="besting">Test</a> 
 
<a href="thetest2" rel="testing">Test</a>

+0

danke, hinzugefügt html, ich möchte NUR eins (zuerst) greifen. Ich dachte, dass zuerst IF nur diejenigen mit Attribut ('rel'). IndexOf ('test'), und zweitens wenn nur diejenigen mit Attribut ('href'). IndexOf ('test2') - also "es kann nur sein one "with test/test2 ... mache ich falsche Annahmen? – innertest

+0

IndexOf bedeutet, dass der Worttext in dem gesuchten Text enthalten ist. Sieht so aus, als würdest du eigentlich die ganze Saite vergleichen wollen. – JasonB

+0

Meine Antwort wurde bearbeitet, um den gesamten String zu vergleichen, damit Ihre Testfälle wie erwartet funktionieren. – JasonB