Я использую пользовательское меню выбора jquery для выбора стран. Я хочу установить значок кнопки на флаг страны.
У меня есть это:
<div class="ui-select">
// select button
<a href="#" role="button" id="brandsByCountry-button" class="ui-btn ui-btn-up-c ui-btn-icon-right ui-btn-corner-all ui-shadow">
<span class="ui-btn-inner ui-btn-corner-all">
<span class="ui-btn-text">Germany</span>
// country flag icon - insert country class here
<span class="ui-icon ui-icon-lang ui-icon-shadow"></span>
</span>
</a>
// selectmenu
<select data-iconpos="right" class="ui-fake-icon" data-icon="lang" data-native-menu="false" id="brandsByCountry" name="brandsByCountry">
<option data-placeholder="true" value="default">Country</option>
<option value="be">Belgium</option>
<option value="ch">Switzerland</option>
<option value="de" selected="selected">Germany</option>
</select>
</div>
Я могу установить флаг, добавив класс страны из val () в span.ui-icon .
Вопрос:
Когда пользователь меняет выбор, мне нужно добавить новый класс и удалить старый класс страны. Я не знаю, как удалить класс, не удаляя все другие необходимые классы. Также мне трудно добавить соответствующий класс с помощью val ().
У меня есть это:
$('#brands').bind( "pagebeforeshow", function( event, data ) {
var initBrand = $('#brandsByCountry').val(),
closestBtn = $('#brandsByCountry').prev('.ui-btn');
closestBtn.addClass( initBrand ); // doesn't work
closestBtn.addClass( "test" ); // works
$('#brandsByCountry').live('change', function() {
var str = $(this).children('option[selected]').val();
console.log(str); // ok, gets new class
closestBtn.addClass( str ).removeClass(':not(".ui-icon, .ui-icon-lang, .ui-icon-shadow")');
})
})
Спасибо за ввод!
РЕШЕНИЕ
вот моя окончательная версия, основанная на ответе Скайрима. Я добавил проверку для нескольких вариантов выбора и значение по умолчанию для выбора для отображения.
$('#brands').one( "pagebeforeshow", function( event, data ) {
// initial class name
$('#brandsByCountry').data('oldVal', 'global' );
// designated element
var closestBtn = $('#brandsByCountry').prev('a'),
orginalClass = $('#brandsByCountry').data('oldVal');
// add inital class/icon
closestBtn.addClass( orginalClass+"");
$('#brandsByCountry').change(function() {
var $this = $(this),
// if more than one option is selected go back to global icon
newClass = $this.val().length >= 2 ? "global" : $this.val(),
oldClass = $this.data('oldVal');
$this.data('oldVal', newClass);
closestBtn.removeClass(oldClass+"").addClass(newClass+"");
});