我在标题栏中有一个导航栏,可以正确初始化和设置样式。我遇到的问题是当我更改innerHtml并调用elem.navbar()时,列表项不会被设置为样式。
以下是附加到导航栏html的代码
var navbar = this.$(':jqmData(role="navbar")');
navbar.empty().append(this.templateNav(building.toJSON()));
navbar.navbar();
这是我正在使用的模板
<ul>
<li><a href="#buildings/1/floors/1">1</a></li>
</ul>
我的问题是如何在添加新的html后让jqm重新计算网格布局并重新设置列表项的样式?
之前
在
答案 0 :(得分:0)
在不了解templateNav
或building
的情况下,这似乎对我有用:
building
JSON对象和templateNav
的样机:
buildingJson = [
{"href":"foo.html",
"title":"One"},
{"href":"bar.html",
"title":"Two"}
]
function templateNav( json ){
str = "";
for( i = 0; i < json.length; i++){
str += '<li><a href="'+json[i].href+'">'+json[i].title+'</a></li>';
}
return str;
}
更新navbar
var navbar = this.$(':jqmData(role="navbar") ul');
navbar.empty().append(templateNav(buildingJson));
HTML 的
<div data-role="navbar">
<ul>
<li><a href="a.html">One</a></li>
</ul>
</div><!-- /navbar -->
我不确定你的代码是什么样的;如果ul
被div
包裹data-role=navbar
,那么在empty
之后,您需要确保templateNav
将结果包装在ul
中{1}},或更新navbar
的选择器以包含ul
。在追加它之前尝试记录templateNav
以查看实际附加的内容。
无论如何,即使在动态更改innerHTML之后,navbar.navbar()
似乎也没有必要。
答案 1 :(得分:0)
从DOM中删除navbar元素。然后重新创建它并触发 创建事件,以处理新HTML标记中包含的所有插件的自动初始化。
以下脚本已成功测试:
var navbarparent = $('#navbar').parent();
$('#navbar').remove();
navbarparent.html("<div data-role=\"navbar\"><ul><li><a class=\"nav-li\" href=\"a.html\">Two</a></li><li><a class=\"nav-li\" href=\"a.html\">Three</a></li></ul></div>").trigger('create');
您可以在下面找到一个有效的例子:
<!DOCTYPE html>
<html>
<head>
<title>Navbar Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript">
$(document).on('click', '.nav-li', function(e){
var navbarparent = $('#navbar').parent();
$('#navbar').remove();
navbarparent.html("<div data-role=\"navbar\"><ul><li><a class=\"nav-li\" href=\"a.html\">Two</a></li><li><a class=\"nav-li\" href=\"a.html\">Three</a></li></ul></div>").trigger('create');
return false;
});
</script>
</head>
<body>
<!-- /page -->
<div data-role="page">
<!-- /header -->
<div data-role="header" data-theme="b">
<h1>Dynamic Navbar</h1>
</div>
<!-- /content -->
<div data-role="content">
<div id="navbar" data-role="navbar">
<ul>
<li><a class="nav-li" href="test.html">One</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
在:
在:
我希望这会有所帮助。