2017-03-20 4 views
2

Mit PhantomJs versuche ich eine Funktion zu erstellen, die eine select tag-ID und die Zeichenfolge des Textinhalts einer Option annimmt und den Wert der zugehörigen Option zurückgibt. Ich bin mir nicht sicher, wie ich die Parameter von der äußersten Funktion an die Funktion weitergeben soll, die an page.evaluate übergeben wurde. Unten ist, was ich versucht habe, aber die Variablen kommen innerhalb von page.evaluate als undefiniert heraus.PhantomJs übergibt Parameter an innere Funktion page.evaluate

function getOptionValue(selectID, name) 
{ 
    console.log("Select ID: " + selectID); 
    console.log("name: " + name); 

    return tempPage.evaluate(function(selectID, name) { 
     console.log("SELECT ID: " + selectID); 
     var elem = document.getElementById(selectID); 
     console.log("elem type: " + elem.type); 
     for(var i = 0; i < elem.length; i++) 
     { 
      if(elem.options[i].text.toLowerCase() === name.toLowerCase()) 
      { 
       return elem.options[i].value; 
      } 
     } 

     return "nothing"; 
    }); 
} 

Antwort

0

PhantomJS gute Dokumentation, darunter page.evaluate Funktion, stellen Sie sicher, immer zuerst zu überprüfen.

Ihre Funktion kann auf diese Weise (entfernt console.log der Kürze halber) festgesetzt:

function getOptionValue(selectID, name) 
{ 
    return tempPage.evaluate(function(selectID, name) { 

     var elem = document.getElementById(selectID); 
     for(var i = 0; i < elem.length; i++) 
     { 
      if(elem.options[i].text.toLowerCase() === name.toLowerCase()) 
      { 
       return elem.options[i].value; 
      } 
     } 

     return "nothing"; 
    }, selectID, name); // <-- parameters are passed to page.evaluate after the function 
} 
Verwandte Themen