`
lizaochengwen
  • 浏览: 660153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery mobile与动态生成元素

阅读更多
要清楚jquery mobile与动态生成元素的关系,得下一番苦功夫去,专研jquery mobile,才会真正了解其中的所以然。今天,在网上看到一blog,解释这个关系非常到位,也很容易理解。贴在这里,供大家阅读。
在Jquerymoblie的使用过程中,动态添加元素后css丢失。

      这个问题在之前JqueryMobile使用心得(3)中我已经说明了其原因(因为页面标签首先经过jquery.mobile-1.0a2.min.js的处理,添加了许多标签,然后再用css布局),并且给出了一种解决方法:动态加载jquery.mobile-1.0a2.min.js。

      但是经过测试,上面这种方法并不好。首先异步加载造成用户可以看到没有加载JS的页面,并且JS加载过一次后,如果再要动态添加新元素的话,就意味着多次加载JS文件,显示问题先不说,这效率也堪忧。

      因此必须提出新方法。

      新方法有两个,调用JS的顺序与普通方式相同,都别动态添加JS。

一是将按照jquery.mobile-1.0a2.min.js处理过后的样式,来动态添加元素。jquery.mobile-1.0a2.min.js处理过后的样式可以通过chrome浏览器的审查元素功能看到。这个办法的缺点很明显:添加了很多奇怪的标签。

例如:

一般情形下动态添加元素:

onelist = "<li><img src='stylesheets/images/file_icon/" + SwitchIcon($obj[i].wext) + "' class='ui-li-icon'/><a href='#' ";

if($obj[i].wtype == "dir"){//文件夹

onelist += "onclick=\"GetShowMyList(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a><span class='ui-li-count'>" + CountSize($obj[i].wsize) + "</span><a href='dialog/operatefile.html' >操作</a></li>";

}else{//非文件夹直接下载

onelist += "onclick=\"download(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a><span class='ui-li-count'>" + CountSize($obj[i].wsize) + "</span><a href='dialog/operatefile.html' >操作</a></li>";



按照jquery.mobile-1.0a2.min.js处理过后的样式,来动态添加元素:



onelist = "<li class='ui-li-has-icon ui-btn ui-btn-icon-right ui-li ui-li-has-alt ui-btn-up-c' role='option' tabindex='0' data-theme='c'>" +

"<div class='ui-btn-inner'>" +

"<div class='ui-btn-text'>" +

"<img class='ui-li-icon ui-li-thumb' src='stylesheets/images/file_icon/" + SwitchIcon($obj[i].wext) + "' />" +

"<a class='ui-link-inherit' href='#' ";

if($obj[i].wtype == "dir"){//文件夹

onelist += "onclick=\"GetShowMyList(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a>" +

  "<span class='ui-li-count ui-btn-up-c ui-btn-corner-all'>" + CountSize($obj[i].wsize) + "</span>" +

  "<a class='ui-li-link-alt ui-btn ui-btn-up-c' href='dialog/operatefile.html' title='操作' data-theme='c'>" +

  "<span class='ui-btn-inner'>" +

    "<span class='ui-btn-text'></span>" +

    "<span class='ui-btn ui-btn-up-d ui-btn-icon-notext ui-btn-corner-all ui-shadow' data-theme='d'>" +

      "<span class='ui-btn-inner ui-btn-corner-all'>" +

        "<span class='ui-icon ui-icon-gear ui-icon-shadow'></span>" +

      "</span>" +

    "</span>" +

  "</span>" +

  "</a></div></div></li>";

}else{//非文件夹直接下载

onelist += "onclick=\"download(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a>" +

  "<span class='ui-li-count ui-btn-up-c ui-btn-corner-all'>" + CountSize($obj[i].wsize) + "</span>" +

  "<a class='ui-li-link-alt ui-btn ui-btn-up-c' href='dialog/operatefile.html' title='操作' data-theme='c'>" +

  "<span class='ui-btn-inner'>" +

    "<span class='ui-btn-text'></span>" +

    "<span class='ui-btn ui-btn-up-d ui-btn-icon-notext ui-btn-corner-all ui-shadow' data-theme='d'>" +

      "<span class='ui-btn-inner ui-btn-corner-all'>" +

        "<span class='ui-icon ui-icon-gear ui-icon-shadow'></span>" +

      "</span>" +

    "</span>" +

  "</span>" +

  "</a></div></div></li>";

}

}


瞧这多了多少代码啊!不过这也是JueryMobile UI前端实际最终处理的代码量。

方法二:refresh

其实JueryMobile 中早就封装了refresh方法。你只需要对新添加的元素节点refresh一下就可以了。

例如: $("#节点名").listview("refresh");

还是刚才那个函数,采用普通的动态添加元素方法,最后加个refresh就搞定了。



function ShowMyListOK(){//处理根目录文件列表函数

if( $glb_result == ""){

alert("返回为空!请重新登录!");

}else{

//alert("成功: "+$glb_result);

$("#wlist").empty();

var $obj = jQuery.parseJSON($glb_result);

var onelist = "";

$.each( $obj, function(i, n){

if( $obj[i].wname != ""){

   onelist = "<li><img src='stylesheets/images/file_icon/" + SwitchIcon($obj[i].wext) + "' class='ui-li-icon'/><a href='#' ";

if($obj[i].wtype == "dir"){//文件夹

onelist += "onclick=\"GetShowMyList(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a><span class='ui-li-count'>" + CountSize($obj[i].wsize) + "</span><a href='dialog/operatefile.html' >操作</a></li>";

}else{//非文件夹直接下载

onelist += "onclick=\"download(\'" + $obj[i].wid + "\')\">" + $obj[i].wname +"</a><span class='ui-li-count'>" + CountSize($obj[i].wsize) + "</span><a href='dialog/operatefile.html' >操作</a></li>";

}

$("#wlist").append(onelist);

}

});

$("#wlist").listview("refresh");

}

}

这个方法很好,但是为什么没有早点发现呢?因为jquery.mobile-1.0a2.js的源码确实很不好读。本人JS水平有限,看到里面内容后,以为调用里面方法必须创建对象,误解了JQuery的原意。试了半天才搞出来,必须发帖纪录一下这个小成功。

原文地址:http://hi.baidu.com/%CE%F7%B1%B1%C5%DD%C3%E6%CD%F5/blog/item/e743654de9424a24afc3ab8b.html
分享到:
评论

相关推荐

    jQuery Mobile 所需要的部署文件

    3. **jQuery Mobile JavaScript**:这是jQuery Mobile的核心库,负责处理触摸事件、页面加载和转换、以及组件的动态化。同样,可以链接到CDN或本地的JS文件。 4. **可能的额外文件**:根据示例的复杂性,可能会有...

    jquerymobile设计完整例子

    jQuery Mobile 的`&lt;div data-role="navbar"&gt;`元素是创建固定顶部或底部导航栏的理想选择。每个导航项可以通过`&lt;a&gt;`标签来创建,并通过`href`属性链接到相应的页面。此外,`data-icon`属性可以添加图标,提升用户体验...

    jQueryMobile-HTML5模板

    5. **Canvas与SVG**:这两种图形绘制技术,可用于创建动态图表、游戏或其他复杂的视觉效果。 **三、学习jQuery Mobile模板** 这个资源包含了多套jQuery Mobile模板,它们是预先设计好的界面布局,可以帮助初学者...

    jQuery mobile相册的一种样式

    在这个主题下,我们将深入探讨如何利用jQuery Mobile创建一个具有吸引力的相册展示。 首先,jQuery Mobile的核心是其基于HTML5的组件模型,这使得开发者能够轻松地创建具有触摸优化交互的页面。在创建相册样式时,...

    JQueryMobile与后台通信

    总结,jQuery Mobile通过AJAX与后台进行通信,结合页面生命周期事件、表单提交和响应数据处理,可以实现动态、交互的移动应用。在与Java后端集成时,理解JSP和Servlet的工作原理,以及RESTful API设计,有助于构建...

    jQuery Mobile实战源码

    这个文件中,jQuery Mobile将DOM元素转换为可触摸的交互元素,并提供了一系列API和方法,如`.page()`用于初始化页面,`.changePage()`用于页面间的切换。此外,还有一系列用于事件绑定和组件创建的函数。 对于页面...

    jQuery mobile相册

    2. **相册容器**:创建一个用于显示相册的容器,例如使用`&lt;div&gt;`元素,并赋予它一个特定的数据-角色,如"data-role='content'",这是jQuery Mobile页面的主要内容区域。 3. **图片列表**:将每张图片包装在一个链接...

    jQuery mobile图片截图

    在 jQuery Mobile 中,我们需要确保截图功能与页面的导航、主题和响应式布局兼容。 5. **图片裁剪**:在“多种模式”中,可能指的是用户可以选择不同的截图区域,比如自由形状、矩形、圆形等。这需要使用类似 Jcrop...

    jquery mobile datepicker 手机端日期选择器

    它利用jQuery Mobile的样式和事件处理,与手机设备的触摸操作完美融合。在初始化时,只需在HTML元素上添加特定的数据属性,如"data-role='datebox'",即可将普通的输入框转换为日期选择器。 `jquery.mobile.datebox...

    jquery mobile官方git资源

    1. **主题系统**:jQuery Mobile使用一套主题系统(ThemeRoller),通过CSS类定义页面元素的视觉样式。开发者可以根据需要自定义主题,确保应用的视觉一致性。 2. **数据属性和增强**:jQuery Mobile通过"data-...

    jQuery Mobile快速入门.pdf

    - **定义与背景**:jQuery Mobile 是一款流行的开源 JavaScript 库,它主要用于构建响应式的 Web 应用程序,支持触摸操作,兼容多种移动设备。该框架基于 HTML5 和 CSS3 技术,能够提供一致且美观的用户体验。 - **...

    jquery mobile 1.4.1版

    最后,`jquery.mobile.structure-1.4.1.css`是一个关键文件,它定义了jQuery Mobile的页面结构和布局规则,包括页头、页脚、内容区域等元素的样式,确保了页面在不同屏幕尺寸下的适应性。 jQuery Mobile 1.4.1版的...

    jQuery mobile 开发案例

    本案例将深入探讨如何使用 jQuery Mobile 创建一个简单的移动端原型设计。 ### 一、jQuery Mobile 的核心概念 1. **数据属性(Data Attributes)**:jQuery Mobile 使用 HTML5 数据属性(data-*)来增强和定制 UI ...

    jQuery Mobile 高级设计模板

    jQuery Mobile 是一个流行的前端框架,专为移动设备和触摸交互设计,它简化了在不同设备上创建响应式、触摸友好的网页应用的过程。这个高级设计模板是针对那些希望利用jQuery Mobile的强大功能,构建出具有专业外观...

    jQuery Mobile快速入门完整版.pdf + 所有源码

    通过本书的学习,读者将会获悉jQuery Mobile的核心特性,以及如何创建可主题化的设计,还会掌握jQuery Mobile的API,以及如何使用PhoneGap来扩展jQuery Mobile。 《jQuery Mobile快速入门》适合想要掌握jQuery ...

    JqueryMobile课件源码

    为了提高性能,应对移动设备的限制,jQuery Mobile 采用延迟增强策略,只对可见的元素进行增强。此外,合理地组织和分隔页面、减少 AJAX 请求、使用异步脚本加载等方式也能有效提升性能。 综上所述,jQuery Mobile ...

    jquery Mobile

    2. **生成HTML标记**:在控件的`Render`方法中,你需要生成对应的HTML和JavaScript代码,确保这些代码在客户端能够正确解析为jQuery Mobile元素。 3. **处理事件**:为了实现服务器端的事件处理,你需要重写`...

    JQueryMobile UI 汇总

    5. **数据链接(Data-Linking)**:通过 data- attributes,可以将 HTML 元素与 JavaScript 事件绑定,实现页面的动态更新。 6. **可扩展组件**:包括下拉菜单、滑块、按钮、表单、弹出对话框等多种 UI 控件,方便...

    android jqueryMobile 类库和实例源代码

    《Android与jQuery Mobile:类库解析与实战指南》 在移动开发领域,Android以其开源、灵活的特点备受开发者青睐。为了提升用户体验,许多开发者选择在Android应用中集成Web技术,其中jQuery Mobile是一个广受欢迎的...

    jQuery Mobile快速入门源代码

    4. **触控事件**:jQuery Mobile 添加了对触控事件的支持,如 `tap`(点击)、`taphold`(长按)、`swipe`(滑动)等,方便在移动设备上创建交互式元素。 5. **表单增强**:框架会自动识别并美化基本的HTML表单元素...

Global site tag (gtag.js) - Google Analytics