Вы можете настроить таргетинг на определенные виджеты и обновить их темы, изменив классы, относящиеся к теме:
//set a theme letter to change to
var theme = 'a';
//update the button widgets on the current page
$.mobile.activePage.find('.ui-btn').not('.ui-li-divider')
.removeClass('ui-btn-up-a ui-btn-up-b ui-btn-up-c ui-btn-up-d ui-btn-up-e ui-btn-hover-a ui-btn-hover-b ui-btn-hover-c ui-btn-hover-d ui-btn-hover-e')
.addClass('ui-btn-up-' + theme)
.attr('data-theme', theme);
//update the list-divider elements
$.mobile.activePage.find('.ui-li-divider').each(function (index, obj) {
if ($(this).parent().attr('data-divider-theme') == 'undefined') {
$(this).removeClass('ui-bar-a ui-bar-b ui-bar-c ui-bar-d ui-bar-e')
.addClass('ui-bar-b')
.attr('data-theme', 'b');
}
})
//update the header, footer, and body
$.mobile.activePage.find('.ui-header, .ui-footer')
.removeClass('ui-bar-a ui-bar-b ui-bar-c ui-bar-d ui-bar-e')
.addClass('ui-bar-' + theme)
.attr('data-theme', theme);
$.mobile.activePage.removeClass('ui-body-a ui-body-b ui-body-c ui-body-d ui-body-e')
.addClass('ui-body-' + theme)
.attr('data-theme', theme);
Вот ссылка на демонстрацию этого кода: http://jsfiddle.net/VNXb2/7/
Вот еще один ответ, который я написал по этому поводу: Как динамически изменить тему в jquery mobile?
Приведенный выше код предназначен для переключения темы после инициализации (вот почему все переключение классов), если вы хотите переключить тему до того, как среда jQuery Mobile инициализирует что-либо, вы можете использовать селектор атрибута, чтобы изменить все элементы в DOM:
//this will update any element with a `data-theme` attribute set so it's set to `a`
$('[data-theme]').attr('data-theme', 'a');
Если вы хотите, чтобы различные типы виджетов были разными темами, вы можете просто сделать селектор немного более конкретным:
//give all form inputs the `a` theme
$('input').attr('data-theme', 'a');
//give all the header elements the `a` theme
$('[data-role="header"]').attr('data-theme', 'a');
Вы можете принудительно выполнить перезагрузку, когда пользователь выберет образец, затем загрузить образец как переменную GET и прочитать эту переменную, когда страница загружается и до того, как в jQuery Mobile есть изменения для инициализации чего-либо:
<script src="jQuery-Core.js"></script>
<script>
//check if there are any GET variables
if (window.location.search != '') {
var swatch = '',
arr = window.location.search.replace('?').split('&');
//loop through the GET variable key/pairs
for (var i = 0; len = arr.length; i < len; i++) {
//split into key/pair
var pair = arr[i].split('=');
//check if the key is `swatch` and if so then set the `swatch` variable to its value
if (pair[0] === 'swatch') {
swatch = pair[1];
}
}
//the `swatch` variable now holds the GET variable `swatch` if it was set
if (swatch !== '') {
$('[data-theme]').attr('data-theme', swatch);
}
}
</script>
<script src="jQuery-Mobile.js"></script>
Обратите внимание на порядок тегов <script>
.