2016-09-02 4 views
2

의 첫 번째 인스턴스를 선택하지 않았으므로 당분간이 사실을 알기 위해 노력했지만 나는 그렇게 할 수 없습니다.indexof()는 문자열

나는 casperjs

var size = this.evaluate(function() { 
    var number = 10; 

      var size; 
      $('select[name="placeholder"] option[name="plId"]') 
       .each(function (index, dom) { 
        var currentsize = $(dom).attr('value'); 
        if (String(currentsize).indexOf(
         String(number)) > -1) { 
         size = currentsize; 
        } 
       }); 
      return size; 
     }); 

이 있고 나는 값

<option name="plId" value="25437456:10" data-label="(10)">10</option> 
<option name="plId" value="53467763:10.5" data-label="(10.5)">10.5</option> 

에서 10을 선택하기 위해 노력하고있어하지만 10를 선택해야 할 때 어떤 이유로, 모든 시간을 10.5 선택합니다.

누구나 잘못된 것이 있습니까? 도움을 감사하십시오.

답변

3

.each() 루프는 모든 요소를 ​​처리합니다. 따라서 size 변수는 마지막 항목이 아니라 첫 번째 항목과 일치하는 항목이됩니다.

.each()에 전달 된 함수 내에서 false을 반환하면 루프가 일치하는 즉시 중지 할 수 있습니다.

var size = this.evaluate(function() { 
     var number = 10; 

     var size; 
     $('select[name="placeholder"] option[name="plId"]') 
     .each(function(index, dom) { 
      var currentsize = $(dom).attr('value'); 
      if (String(currentsize).indexOf(
      String(number)) > -1) { 
      size = currentsize; 
      return false; // <--- ADD THIS 
      } 
     }); 
     return size; 
    }); 
+0

이렇게 간단한 해결책입니다. 감사 –