Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

计划和完成这个例子中,音符的顺序如下:

  1. Java程序猿的JavaScript学习笔记(1——理念)
  2. Java程序猿的JavaScript学习笔记(2——属性复制和继承)
  3. Java程序猿的JavaScript学习笔记(3——this/call/apply)
  4. Java程序猿的JavaScript学习笔记(4——this/闭包/getter/setter)
  5. Java程序猿的JavaScript学习笔记(5——prototype)
  6. Java程序猿的JavaScript学习笔记(6——面向对象模拟)
  7. Java程序猿的JavaScript学习笔记(7——jQuery基本机制)
  8. Java程序猿的JavaScript学习笔记(8——jQuery选择器)
  9. Java程序猿的JavaScript学习笔记(9——jQuery工具方法)
  10. Java程序猿的JavaScript学习笔记(10——jQuery-在“类”层面扩展)
  11. Java程序猿的JavaScript学习笔记(11——jQuery-在“对象”层面扩展)
  12. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
  13. Java程序猿的JavaScript学习笔记(13——jQuery UI)
  14. Java程序猿的JavaScript学习笔记(14——扩展jQuery UI)

这是笔记的第14篇。今天我们在上一篇的基础上,扩展Easyui。

这是笔记的最后一篇,接下来的计划是:学习下移动端html+css+javascript。

学习方法是:做样例,这样更有动力也更有成效。

如今的想法是逐个实现微信的界面,页面效果和风格尽量贴近。

页面性能积累不多。以后专题学习,这次先不考虑。

    作者博客:http://blog.csdn.net/stationxp
    作者微博:http://weibo.com/liuhailong2008
    转载请取得作者允许 

回正题。

1 目标

做一个web控件。实现功能:显示此系列笔记的文件夹。

控件用法:

<p id='p'></p>
$('#p').hailongjsnote();

支持属性:sort——asc正序,desc倒叙。

支持方法:getCount 得到条数。

事件:      preload 和 loaded。

形如:

<p id='p' sort='asc'></p>
$('#p').hailongjsnote('option','sort','desc');
var cnt = $('#p').hailongjsnote('getCount');
<p id='p' preload='func();'></p>
$('#p').hailongjsnote('on','loaded',function(event,notes){
    //
});

2 逐个开发功能

2.1 先显示出来

文件列表:

jquery.hailongjsnote.js

hailongjsnote.css -- 可能用不到,我不倾向在组件中将样式写死

demo.html

还有:

jquery.min.js

jquery.parser.js

实现基本功能,代码例如以下:

/**
 * hailongjsnote
 *      author : liuhailong
 *   date   : 2014-10-28
 * Dependencies:
 *   jquery.mini.js / jquery.js
 *      jquery.parser.js
 */
(function($){

    function init(target){
        $(target).addClass('hailongjsnote');
        $(target).html('<ul class="jsnote-list"></ul>');
        return $(target);
    }

    function setContent(target,notes){
        var item , htm = '';
        for(var idx = 0; idx < notes.length; ++idx){
                item = notes[idx];
                htm += '<li><a href="'+item.href+'">'+item.title+'</a></li>';
        }
        $(target).find('ul').html(htm);
    }

    $.fn.hailongjsnote = function(options, param){
        if (typeof options == 'string'){
            var method = $.fn.hailongjsnote.methods[options];
            if (method){
                return method(this, param);
            }
        }

        options = options || {};
        return this.each(function(){
            var state = $.data(this, 'hailongjsnote');
            if (state){
                $.extend(state.options, options);
            } else {
                state = $.data(this, 'hailongjsnote', {
                    options: $.extend({}, $.fn.hailongjsnote.defaults, $.fn.hailongjsnote.parseOptions(this), options),
                    jsnote: init(this),
                    notes : $.fn.hailongjsnote.getNotes()
                });
            }
            setContent(this,state.notes);
        });
    };

  $.fn.hailongjsnote.parseOptions = function(target){
        return $.extend({}, $.parser.parseOptions(target, ['width','height','sort','click']));
    };

    $.fn.hailongjsnote.getNotes = function(){
        return [
            {    sn:1,
                title:'Java程序猿的JavaScript学习笔记(1——理念) ',
                href:'http://blog.csdn.net/stationxp/article/details/40020009'
            },{
                sn:2,
                title:'Java程序猿的JavaScript学习笔记(2——属性复制和继承) ',
                href:'http://blog.csdn.net/stationxp/article/details/40068345'
            },{
                sn:3,
                title:'Java程序猿的JavaScript学习笔记(3——this/call/apply) ',
                href:'http://blog.csdn.net/stationxp/article/details/40130687'
            },{
                sn:4,
                title:'Java程序猿的JavaScript学习笔记(4——this/闭包/getter/setter) ',
                href:'http://blog.csdn.net/stationxp/article/details/40146441'
            },{
                sn:5,
                title:'Java程序猿的JavaScript学习笔记(5——prototype) ',
                href:'http://blog.csdn.net/stationxp/article/details/40205967'
            },{
                sn:6,
                title:'Java程序猿的JavaScript学习笔记(6——面向对象模拟) ',
                href:'http://blog.csdn.net/stationxp/article/details/40264845'
            },{
                sn:7,
                title:'Java程序猿的JavaScript学习笔记(7——jQuery基本机制) ',
                href:'http://blog.csdn.net/stationxp/article/details/40384477'
            },{
                sn:8,
                title:'Java程序猿的JavaScript学习笔记(8——jQuery选择器) ',
                href:'http://blog.csdn.net/stationxp/article/details/40476959'
            },{
                sn:9,
                title:'Java程序猿的JavaScript学习笔记(9——jQuery工具方法) ',
                href:'http://blog.csdn.net/stationxp/article/details/40480185'
            },{
                sn:10,
                title:'Java程序猿的JavaScript学习笔记(10——jQuery-在“类”层面扩展) ',
                href:'http://blog.csdn.net/stationxp/article/details/40492735'
            },{
                sn:11,
                title:'Java程序猿的JavaScript学习笔记(11——jQuery-在“对象”层面扩展) ',
                href:'http://blog.csdn.net/stationxp/article/details/40497837'
            },{
                sn:12,
                title:'Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器) ',
                href:'http://blog.csdn.net/stationxp/article/details/40501123'
            },{
                sn:13,
                title:'Java程序猿的JavaScript学习笔记(13——jQuery UI) ',
                href:'http://blog.csdn.net/stationxp/article/details/40534209'
            },{
                sn:14,
                title:'Java程序猿的JavaScript学习笔记(14——扩展jQuery UI) ',
                href:'http://blog.csdn.net/stationxp/article/details/40535073'
            }
        ];
    }

    $.fn.hailongjsnote.defaults = {
        width: '500px'
    };
})(jQuery);

2.2 加 sort 标签属性

<p id=‘p‘ sort=‘asc‘></p>

实现:

改动setContent代码就可以:

function setContent(target,notes){
        var item , htm = '';
        var opts = $.data(target, 'hailongjsnote').options;//opts里存着各种參数
        if('desc' == opts.sort){
                for(var idx = notes.length-1; idx >=0; --idx){
                        item = notes[idx];
                        htm += '<li><a href="'+item.href+'">'+item.title+'</a></li>';
                }
        }else{
                for(var idx = 0; idx < notes.length; ++idx){
                        item = notes[idx];
                        htm += '<li><a href="'+item.href+'">'+item.title+'</a></li>';
                }
        }
        $(target).find('ul').html(htm);
}

2.3 通过js加 sort 属性

$(‘#p‘).hailongjsnote(‘option‘,‘sort‘,‘desc‘);

hailongjsnote函数须要改动定义,以支持多个參数,最好用argumets,typeof 实现。

    $.fn.hailongjsnote = function(options, param,param2){
        if (typeof options == 'string'){
            var method = $.fn.hailongjsnote.methods[options];
            if (method){
                return method(this, param,param2);
            }
        }

添加例如以下代码实现:

   $.fn.hailongjsnote.methods = {
        //$('#p').hailongjsnote('option','sort','desc');
        option: function(jq,opt,param){
            var state = $.data(jq[0], 'hailongjsnote');
            var opts =  state.options;
            if(param === undefined ){//没有传入第三个參数
                    if(opt){
                            // 全部的属性都能够读取
                            return opts[opt];
                    }
            }else{
                    // 给属性设值,不是每一个属性都同意
                    if(opt){
                            opts[opt] = param; // 缓存的值也自己主动更新了吧?
                            if(opt=='sort'){
                                    setContent(jq,state.notes);
                            }
                    }
            }
        }
    };

2.4 添加方法

var cnt = $(‘#p‘).hailongjsnote(‘getCount‘);

添加方法:

    $.fn.hailongjsnote.methods = {
        getCount : function(jq){
                var state = $.data(jq[0], 'hailongjsnote');
                var notes = state.notes;
                return notes && notes.length ?

notes.length : 0;
        }
    };

2.5 两个事件

// 下面代码未经调试
    function setContent(target,notes){
        var opts = $.data(target, 'hailongjsnote').options;
        var preload = opts['preload'];
        var loaded = opts['loaded'];
        notes = preload && preload(notes);
        var item , htm = '';
        ...
        $(target).find('ul').html(htm);
        loaded && loaded(htm);
    }

基本搞定,详细信息,然后慢慢推敲。

终身学习,保持。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-08 09:47:52

Java程序猿JavaScript学习笔记(14——扩大jQuery UI)的相关文章

Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Ja

Java程序员的JavaScript学习笔记(13—— jQuery UI)

计划按如下顺序完成这篇笔记: 1. 理念. 2. 属性复制和继承. 3. this/call/apply. 4. 闭包/getter/setter. 5. prototype. 6. 面向对象模拟. 7. jQuery基本机制. 8. jQuery选择器. 9. jQuery工具方法. 10. jQuery-在"类"层面扩展. 11. jQuery-在"对象"层面扩展. 12. jQuery-扩展选择器. 13. jQuery UI. 14. 扩展jQuery UI

Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

Java程序员的JavaScript学习笔记(9—— jQuery工具方法)

计划按如下顺序完成这篇笔记: 1.    理念. 2.    属性复制和继承. 3.    this/call/apply. 4.    闭包/getter/setter. 5.    prototype. 6.    面向对象模拟. 7.    jQuery基本机制. 8.    jQuery选择器. 9.    jQuery工具方法. 10.    jQuery-在"类"层面扩展. 11.    jQuery-在"对象"层面扩展. 12.    jQuery-扩

Java程序员的JavaScript学习笔记(8——jQuery选择器)

计划按如下顺序完成这篇笔记: 1.    理念. 2.    属性复制和继承. 3.    this/call/apply. 4.    闭包/getter/setter. 5.    prototype. 6.    面向对象模拟. 7.    jQuery基本机制. 8.    jQuery选择器. 9.    jQuery工具方法. 10.    jQuery-在"类"层面扩展. 11.    jQuery-在"对象"层面扩展. 12.    jQuery-扩

Java程序员的JavaScript学习笔记(7——jQuery基本机制)

计划按如下顺序完成这篇笔记: 理念. 属性复制和继承. this/call/apply. 闭包/getter/setter. prototype. 面向对象模拟. jQuery基本机制. jQuery选择器. jQuery工具方法. jQuery-在"类"层面扩展. jQuery-在"对象"层面扩展. jQuery-扩展选择器. jQuery UI. 扩展jQuery UI. 这是笔记的第7篇,聊聊jQuery基本机制,学习的同时,我们试图实现一个缩略版本的jQue

OpenLayers学习笔记3——使用jQuery UI美化界面设计

PC端软件在开发是有较多的界面库可以选择,比如DevExpress.BCG.DotNetBar等,可以很方便快捷的开发出一些炫酷的界面,最近在学习OpenLayers,涉及到web前端开发,在设计界面时刚开始不熟悉,设计的很丑,后来参照ArcGIS在线体验中心的demo以及对web前端界面设计库的调研,最终采用jQuery UI来美化界面(还有比较强大的Dojo).先来看下效果: 这里说下地图与影像切换两个按钮的实现,其他的都是一样的方式: CSS文件: #mapViewButton { wid

OpenLayers学习笔记5——使用jQuery UI实现查询并标注(UI篇)

最近事情很多,老板给的压力也很大,经常出差,另外项目和个人研究还都要跟上,本月要交论文,还要写专利,只能抽时间来学习其他的东西了.关于OpenLayers的在博客中不会写太多具体的实现(网上有很多openlayers的博客,关于加载wms.标记.量测的,我这里就不再重复了),只是记录自己的开发学习经验和一些需要注意的问题,真正做开发的都知道,要想学好开发只能通过自己默默的多磨..关于WW的学习和开发已经搁置了好久了,等过去这段时间,打算好好学一下jogl,争取做一些粒子模拟出来,另外打算采用rc

javascript学习笔记-2:jQuery中$(&quot;xx&quot;)返回值探究

最近在写一个jQuery插件的时候,需要用到一个条件: 一组img标签,每一个元素都需要被它前面的元素值src替换,如果是第一个(序列为0)则其值为最后一个元素值,如果是最后一个,那么其值为第一个元素值,以此形成一个闭环. 为此,我使用了三元运算符?:,其表达式为:var next=$(this).next()?$(this).next():imageItems.first(); 运行测试发现如下问题,当运行到数组最后一个元素时,其next是始终不会是这一组img标签的第一个,为此对$(this