Napisałem ten mały skrypt:

var a = document.getElementsByTagName('option')
 for (var i = 0; i < a.length; i++) {
 var val = a[i].innerHTML.split('   ').join('')
  if (val == "39") {
   alert("gg");
  }
}

Przejść przez to:

<select name="id" autocomplete="off" class="custom-select">
    <option value="-1">Choose size</option>
    <option value="32286">37</option>
    <option value="32287">37,5</option>
    <option value="32288">38</option>
    <option value="32289">39</option>
    <option value="32290">39.5</option>
    <option value="32291">40</option>
    <option value="32292">40,5</option>
    <option value="32293">41,5</option>
    <option value="32294">42</option>
</select>

I sprawdź, czy którykolwiek z INNERHTML równa się dokładnie 39 i ostrzega mnie, jeśli tak.

Ale z jakiegoś powodu nie działa. To wszystko wygląda dla mnie dobrze. Co zrobiłem źle?

0
Samhakadas 28 czerwiec 2017, 00:28

3 odpowiedzi

Najlepsza odpowiedź

Val wydaje się zawierać ciąg z białymi znakami, możesz użyć przycinania (), aby usunąć te przed sprawdzeniem.

var a = document.getElementsByTagName('option')
 for (var i = 0; i < a.length; i++) {
 var val = a[i].innerHTML.split('   ').join('')
  if (val.trim() == "39") {
   alert("gg");
  }
}
0
Dij 27 czerwiec 2017, 21:34

Twój kod szuka dokładnie 3 przestrzeni do podziału i ponieważ kod źródłowy pokazuje każdy option z wieloma więcej niż 3 przestrzeniami, nadal pozostały spacje po wykonaniu operacji. Oznacza to, że val nadal będzie zawierał spacje, a kod zakłada, że wszystkie spacje zostały usunięte.

Możesz usunąć wszystkie spacje z:

var val = a[i].innerHTML.replace(/\s+/g);

Lub można użyć metody łańcucha .trim(), która usuwa przestrzenie prowadzące i końcowe, ale w ogóle nie jest konieczne. Wystarczy sprawdzić textContent (nie .innerHTML, ponieważ próbujesz odczytać dowolne elementy HTML) option, przy użyciu indexOf(), która wygląda na cały ciąg i zwraca lokalizację indeks Znaleziony ciąg lub -1 Jeśli ciąg nie został znaleziony.

Jako boczna uwaga, dlaczego twoje elementy option nawet w pierwszej kolejności znajdują się w nich wszystkie białe znaki?

var a = document.getElementsByTagName('option')
 for (var i = 0; i < a.length; i++) {
   // Just check the contents of the element to see if the specified string exists in it
   if (a[i].textContent.indexOf("39") > -1) {
   alert("gg");
  }
}
<select name="id" autocomplete="off" class="custom-select">
    <option value="-1">Choose size</option>
    <option value="32286">        37        </option>
    <option value="32287">      37,5 </option>
    <option value="32288">    38     </option>
                                                                                                        <option value="32289">
                                39
                                                            </option>
                                                                                                        <option value="32290">39.5</option>
                                                                                                        <option value="32291">
                                40
                                                            </option>
                                                                                                        <option value="32292">
                                40,5
                                                            </option>
                                                                                                        <option value="32293">
                                41,5
                                                            </option>
                                                                                                        <option value="32294">
                                42
                                                            </option>
                                        </select>
0
Scott Marcus 27 czerwiec 2017, 21:38

Spróbuj użyć Trim () - To będzie Utrzymuj wymóg, aby wartość była dokładnie 39.

var a = document.getElementsByTagName('option');
for (var i = 0; i < a.length; i++) {
  if (a[i].innerHTML.trim() === "39") {
    alert("gg");
  }
}
1
tomsterritt 27 czerwiec 2017, 21:34