Выберите вариант выбора на основе текста - PullRequest
0 голосов
/ 20 марта 2019

Мне нужно это в "современном DOM", если это возможно.

Вот код.

<select name="skuAndSize" id="skuAndSize" class="ncss-btn fs16-sm ncss-base pb3-sm prl5-sm pt3-sm css-1rsed2n">
  <option value="" disabled="">Select Size</option>
  <option value="22348626:7" disabled="">US 7</option>
  <option value="22348625:7.5" disabled="">US 7.5</option>
  <option value="22348624:8" disabled="">US 8</option>
  <option value="22348621:8.5" disabled="">US 8.5</option>
  <option value="22348619:9" disabled="">US 9</option>
  <option value="22348623:9.5">US 9.5</option>
  <option value="22348618:10">US 10</option>
  <option value="22348622:10.5">US 10.5</option>
  <option value="22348635:11">US 11</option>
  <option value="22348634:11.5" disabled="">US 11.5</option>
  <option value="22348633:12">US 12</option>
  <option value="22348632:12.5" disabled="">US 12.5</option>
  <option value="22348631:13">US 13</option>
  <option value="22348630:14" disabled="">US 14</option>
  <option value="22348629:15" disabled="">US 15</option>
</select>

Я пробовал следующее, но мне нужно это для текста, и это не работает.

var val = 'US 10.5';    
document.querySelector('#skuAndSize [value="' + val + '"]').selected = true;

Пожалуйста, помогите, мне нужно это в современном dom, так как я использую его в Swift (valuJavaScript).

Ответы [ 4 ]

1 голос
/ 20 марта 2019

Вы можете установить selectedIndex с помощью JavaScript

const val = 'US 10.5';
const skuAndSize = document.getElementById ('skuAndSize');
skuAndSize.selectedIndex = [...skuAndSize.options].findIndex (option => option.text === val);
<select name="skuAndSize" id="skuAndSize" class="ncss-btn fs16-sm ncss-base pb3-sm prl5-sm pt3-sm css-1rsed2n">
  <option value="" disabled="">Select Size</option>
  <option value="22348626:7" disabled="">US 7</option>
  <option value="22348625:7.5" disabled="">US 7.5</option>
  <option value="22348624:8" disabled="">US 8</option>
  <option value="22348621:8.5" disabled="">US 8.5</option>
  <option value="22348619:9" disabled="">US 9</option>
  <option value="22348623:9.5">US 9.5</option>
  <option value="22348618:10">US 10</option>
  <option value="22348622:10.5">US 10.5</option>
  <option value="22348635:11">US 11</option>
  <option value="22348634:11.5" disabled="">US 11.5</option>
  <option value="22348633:12">US 12</option>
  <option value="22348632:12.5" disabled="">US 12.5</option>
  <option value="22348631:13">US 13</option>
  <option value="22348630:14" disabled="">US 14</option>
  <option value="22348629:15" disabled="">US 15</option>
</select>
0 голосов
/ 20 марта 2019

Вы можете использовать Array#find() и сравнить text свойство <option> с требуемым значением

var val = 'US 10.5',
  options = document.querySelector('#skuAndSize').options,
  wantedOption = Array.from(options).find(o => o.text === val);
  
if (wantedOption) {
  wantedOption.selected = true;
}
<select name="skuAndSize" id="skuAndSize" class="ncss-btn fs16-sm ncss-base pb3-sm prl5-sm pt3-sm css-1rsed2n">
  <option value="" disabled="">Select Size</option>
  <option value="22348626:7" disabled="">US 7</option>
  <option value="22348625:7.5" disabled="">US 7.5</option>
  <option value="22348624:8" disabled="">US 8</option>
  <option value="22348621:8.5" disabled="">US 8.5</option>
  <option value="22348619:9" disabled="">US 9</option>
  <option value="22348623:9.5">US 9.5</option>
  <option value="22348618:10">US 10</option>
  <option value="22348622:10.5">US 10.5</option>
  <option value="22348635:11">US 11</option>
  <option value="22348634:11.5" disabled="">US 11.5</option>
  <option value="22348633:12">US 12</option>
  <option value="22348632:12.5" disabled="">US 12.5</option>
  <option value="22348631:13">US 13</option>
  <option value="22348630:14" disabled="">US 14</option>
  <option value="22348629:15" disabled="">US 15</option>
</select>
0 голосов
/ 20 марта 2019

Это версия JQuery для вашего требования.

$('#skuAndSize').change(function(){

var text1 = 'US 10.5';
$("#skuAndSize option").filter(function() {
    
    return $(this).text() == text1; 
}).prop('selected', true);

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="skuAndSize" id="skuAndSize" class="ncss-btn fs16-sm ncss-base pb3-sm prl5-sm pt3-sm css-1rsed2n">
  <option value="" disabled="">Select Size</option>
  <option value="22348626:7" disabled="">US 7</option>
  <option value="22348625:7.5" disabled="">US 7.5</option>
  <option value="22348624:8" disabled="">US 8</option>
  <option value="22348621:8.5" disabled="">US 8.5</option>
  <option value="22348619:9" disabled="">US 9</option>
  <option value="22348623:9.5">US 9.5</option>
  <option value="22348618:10">US 10</option>
  <option value="22348622:10.5">US 10.5</option>
  <option value="22348635:11">US 11</option>
  <option value="22348634:11.5" disabled="">US 11.5</option>
  <option value="22348633:12">US 12</option>
  <option value="22348632:12.5" disabled="">US 12.5</option>
  <option value="22348631:13">US 13</option>
  <option value="22348630:14" disabled="">US 14</option>
  <option value="22348629:15" disabled="">US 15</option>
</select>
0 голосов
/ 20 марта 2019

Быстрый ответ

Вы можете установить значение выбора, установив свойство value:

document.querySelector('#skuAndSize').value = '22348622:10.5';

См. https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement

Полный пример

const tests = [4, 'Three', 2, '1'];
let i = 0;

window.setInterval(() => {
  const value = tests[i++ % tests.length];
  document.querySelector('select').value = value;
  document.querySelector('p').textContent = `Programatically set \´${value}\´ (type: ${typeof value})`;
}, 2000);
<select>
  <option>-</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option>Three</option>
</select>

<p></p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...