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.

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

1 ответ

Решение

.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;
    });
Другие вопросы по тегам