文档章节

看源代码chained.min.js的代码规范

FeanLau
 FeanLau
发布于 2017/06/27 23:19
字数 330
阅读 4
收藏 0

看如下的代码:

/*
 * Chained - jQuery / Zepto chained selects plugin
 *
 * Copyright (c) 2010-2014 Mika Tuupola
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   http://www.appelsiini.net/projects/chained
 *
 * Version: 1.0.0
 *
 * By Neelie: 增加 data-level 确认父级, 取代 value, 以允许中文值
 *
 */

;(function($, window, document, undefined) {
    "use strict";

    $.fn.chained = function(parent_selector) {

        function option_value(el) {
            return $("option:selected", el).data('level') || $("option:selected", el).val();
        }

        return this.each(function() {

            /* Save this to child because this changes when scope changes. */
            var child   = this;
            var backup = $(child).clone();

            /* Handles maximum two parents now. */
            $(parent_selector).each(function() {
                $(this).bind("change", function() {
                    updateChildren();
                });

                /* Force IE to see something selected on first page load, */
                /* unless something is already selected */
                if (!$("option:selected", this).length) {
                    $("option", this).first().attr("selected", "selected");
                }

                /* Force updating the children. */
                updateChildren();
            });

            function updateChildren() {
                var trigger_change = true;
                // var currently_selected_value = $("option:selected", child).val();
                var currently_selected_value = option_value(child);

                $(child).html(backup.html());

                /* If multiple parents build classname like foo\bar. */
                var selected = "";
                $(parent_selector).each(function() {
                    var selectedClass = option_value(this);
                    if (selectedClass) {
                        if (selected.length > 0) {
                            if (window.Zepto) {
                                /* Zepto class regexp dies with classes like foo\bar. */
                                selected += "\\\\";
                            } else {
                                selected += "\\";
                            }
                        }
                        selected += selectedClass;
                    }
                });

                /* Also check for first parent without subclassing. */
                /* TODO: This should be dynamic and check for each parent */
                /*       without subclassing. */
                var first;
                if ($.isArray(parent_selector)) {
                    first = $(parent_selector[0]).first();
                } else {
                    first = $(parent_selector).first();
                }
                var selected_first = option_value(first);

                $("option", child).each(function() {
                    /* Remove unneeded items but save the default value. */
                    if ($(this).hasClass(selected) && $(this).val() === currently_selected_value) {
                        $(this).prop("selected", true);
                        trigger_change = false;
                    } else if (!$(this).hasClass(selected) && !$(this).hasClass(selected_first) && $(this).val() !== "") {
                        $(this).remove();
                    }
                });

                /* If we have only the default value disable select. */
                if (1 === $("option", child).size() && $(child).val() === "") {
                    $(child).prop("disabled", true);
                } else {
                    $(child).prop("disabled", false);
                }
                if (trigger_change) {
                    $(child).trigger("change");
                }
            }
        });
    };

    /* Alias for those who like to use more English like syntax. */
    $.fn.chainedTo = $.fn.chained;

    /* Default settings for plugin. */
    $.fn.chained.defaults = {};

})(window.jQuery || window.Zepto, window, document);

 

© 著作权归作者所有

FeanLau
粉丝 3
博文 226
码字总数 123622
作品 0
浦东
程序员
私信 提问
加载中

评论(1)

FeanLau
FeanLau
这个插件同时兼容Zepto和jQuery
大牛程序员200行CSS实现爆款特效之阴阳师卡片幽灵边框特效,觉得666

在博客上看到一个这样的案例,CSS实现爆款特效之阴阳师卡片幽灵边框特效 。简单的给大家介绍下:如何用JavaScript实现雪花飘落效果,并且可以读取图片的alt信息显示出来。自个也copy了一份,...

小b狸猫
2017/12/11
0
0
如何为 PHP 贡献代码

本文作者 @雪候鸟 PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天写这篇文章, 就是...

红薯
2012/04/30
1K
7
Javac编译原理:Item(1)——基本介绍

首先,必须明确Java语言规范和Java虚拟机规范不是一回事。 Java语言规范描述了Java语言有哪些词法和语法,而Java虚拟机也有Java虚拟机规范,它们都有自己的词法和语法解析规则,而且解析规则...

_Roger_
2016/02/16
135
0
Java单元测试编码规范

包结构规范 单元测试包结构和源码结构必须保持一致,如下图所示: 文件命名规范 单元测试文件名字是由“被测试文件名 + Test”组成,如下图所示 代码编写规范 基础单元测试类 被各个单元测试...

紫川帝林
2018/03/08
1
0
华为存储对接微软SCO及Powershell开发项目

评审说明:为了便于评审,请各位竞标者在报名时,通过附件形式上传项目竞标文档(文档内容应含:需求理解、需求疑问、个人介绍信息、开发计划等),我们会根据竞标文档对报名者进行初步评估。...

华为众包
2017/03/23
7
2

没有更多内容

加载失败,请刷新页面

加载更多

springMVC 文件上传

相关依赖 使用 springMVC 提供的文件上传需要在项目中加入两个 jar 包,对应的 maven 的依赖分别是:commons-io 和 commons-fileupload <dependency> <groupId>commons-io</groupId> ......

dahuil
20分钟前
0
0
以太坊中文文档翻译-智能合约

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 智能合约(Contracts) 智能合约相关的 API,接口的参数说明请参考Etherscan API 约定, 文...

Tiny熊
30分钟前
1
0
Tomcat

16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 java容器比较 http://my.oschina.net/diedai/blog/2713......

tobej
40分钟前
1
0
苹果面向Mac发布英特尔处理器漏洞缓解措施

去年苹果向Safari浏览器推出安全更新以修复基于ARM价格和英特尔的处理器存在的推测执行系列安全漏洞。 不过当时苹果并未发布有关处理器性能下降的测试结果,但大家都知道安装缓解措施会造成处...

linux-tao
今天
1
0
第一个vue应用

https://www.bootcdn.cn/vue/ <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> .bg{ color: red; ......

江戸川
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部