您可以使用此处的代码完成您想要的:http: //jsfiddle.net/kE8GJ/。请注意,代码中最重要的部分是这个条件:
var element;
if ($(this).hasClass("ui-li-link-alt")) {
element = $(this);
}
else {
element = $(this).closest('li.ui-li');
}
element
.removeClass("ui-btn-up-c ui-btn-hover-c")
.addClass("ui-btn-hover-e")
.attr("data-theme", "e");
这将li
在左侧按钮的元素或a
右侧按钮的元素上正确设置主题,这最终具有将新主题应用于单击的元素的效果,这似乎是您的目标。
至于TypeError
你看到的,我认为这与你的.button()
电话有关。jQuery Mobile 列表视图中的元素通常不作为按钮处理,因此此类调用可能会导致问题。所有类似的调用.trigger('create')
都应该在该listview
级别进行。
为了响应您的编辑,您必须手动添加和删除类才能成功切换主题。否则,旧主题的课程仍然存在。例如,如果您从 theme 切换e
到c
,ui-btn-up-e
或ui-btn-hover-e
仍将在li
元素上,因此它似乎不会切换回 theme c
。你可以在这里看到这个:http: //jsfiddle.net/wu86C/。
最重要的代码是这里的第二行(以及从c
to切换的等效代码e
):
var li = $(this).closest('li');
li.removeClass("ui-btn-up-e ui-btn-hover-e").addClass("ui-btn-hover-c");