更改内部HTML后的样式导航栏列表项

时间:2012-09-21 19:18:03

标签: jquery jquery-mobile

我在标题栏中有一个导航栏,可以正确初始化和设置样式。我遇到的问题是当我更改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重新计算网格布局并重新设置列表项的样式?

之前

Navbar before appending to innerHTML

Navbar after appending to innerHTML

2 个答案:

答案 0 :(得分:0)

在不了解templateNavbuilding的情况下,这似乎对我有用:

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 -->

我不确定你的代码是什么样的;如果uldiv包裹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>

在: enter image description here

在: enter image description here

我希望这会有所帮助。