2016-09-02 2 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; 
     }); 

и я пытаюсь выбрать 10 из значения

<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,5 каждый раз, когда он должен выбрать 10.

Кто-нибудь знает, что случилось? Цените помощь.

ответ

3

Цикл .each() обрабатывает каждый элемент. Таким образом, переменная size в конечном итоге будет последней, которая соответствует, а не первой.

Вы можете остановить цикл, как только у вас есть соответствие, вернув false из функции, которую вы передали .each().

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

Такое простое решение, оно сработало. благодаря –