我想根据所选选项将不同的背景颜色应用于我的选择元素。
我有这段代码,我想应用于我的案例:
$('select').on('change', function(ev) {
$(this).attr('class', '').addClass($(this).children(':selected').val());
});
问题是,在我的情况下,我不想要所选选项的完整值。但只有.val()返回的值的最后一个字符
我试过了
$(this).attr('class', '').addClass($(this).children(':selected').val().id.slice(-1));
但它不起作用
我从这个Example中获取了这个代码。这也是我想要的,但在我的情况下,选项的值对于每个选项都是不同的,我有数百个选择和选项。采用以下格式:
Name - Date - 1 Letter Variable
所以我有这样的CSS:
select, option { background: #fff; }
select.P, option[value$='P'] { background: yellow; }
select.O, option[value$='O'] { background: lightblue; }
select.A, option[value$='A'] { background: lightgreen; }
select.R, option[value$='R'] { background: salmon; }
以及选择的一个例子:
<select onchange='myFunction()' id='" . $i . "' name='" . $i . "' style='width: 80px;'>
<option value='' style='background:white' style='width: 80px;'></option>
<option value='" . $vacationIdP . "' style='background:yellow' style='width: 80px;'>P</option>
<option value='" . $vacationIdO . "' style='background:lightblue' style='width: 80px;'>O</option>
<option value='" . $vacationIdA . "' style='background:lightgreen' style='width: 80px;'>A</option>
<option value='" . $vacationIdR . "' style='background:salmon' style='width: 80px;'>R</option>
</select>
问题是你在slice
上应用undefined
。 .val().id
是undefined
。
在你的html
你不应该得到最后的char.Its不是最后一个。用这个
$('select').on('change', function(ev) {
$(this).attr('class', '').addClass($(this).children(':selected').val().split('.')[1].trim().slice(-1));
});
你可以使用chartAt
$('select').on('change', function(ev) {
let k = $(this).children(':selected').val();
console.log(k.charAt(k.length - 1))
//$(this).attr('class', '').addClass($(this).children(':selected').val());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value='abc'> ABC</option>
<option value='def'>DEF</option>
<option value='ghi'> GHI</option>
</select>
尝试val()。pop();应该返回最后一个元素。