#javascript #dom
#javascript #dom
Вопрос:
Мне это нужно в «современном 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 (evaluateJavaScript).
Ответ №1:
Вы можете установить 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>
Ответ №2:
Вы можете использовать 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>
Ответ №3:
Это версия 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>
Ответ №4:
Быстрый ответ
Вы можете установить значение выбора, установив свойство 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>