jquery双向列表选择器DIV模拟版

前段时间项目需要用到双向列表选择,想直接用select,结果发现某些样式不支持,只好用div模拟了以下,功能基本实现能用了,需要其他功能自己加上,譬如列表里展示多列数据等。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>双向列表选择器DIV模拟</title>
<script type="text/javascript" src="../public/jquery-1.8.2.js"></script>
<script type="text/javascript">

/**
 * two_way_list_selector.js - v1.0.0 (2016/7/26)
 *
 * Allows you to easily page layout!
 * by tie. qq:2185987263
 *
 * Copyright (C) 2016, tie.
 * All rights reserved.
 *
 **/

var two_way_list_selector=function(o){

    var obj=o;
    var btn_a=o.find(".btn_a");
    var btn_b=o.find(".btn_b");
    var btn_c=o.find(".btn_remove_all");
    var btn_d=o.find(".btn_add_all");
    var select_a=o.find(".select_a");
    var select_b=o.find(".select_b");

    //是否按下了shift
    var is_shift=false;
    //是否按下了ctrl
    var is_ctrl=false;

    document.addEventListener("keydown",function(e){
        is_shift=e.shiftKey;
        is_ctrl=e.ctrlKey;
    },false);

    document.addEventListener("keyup",function(e){
        is_shift = is_ctrl = false;
    },false);

    //进行排序
    var option_sort=function(o){
        o.html(o.find("div").toArray().sort(function(a, b){
            return parseInt($(a).attr("data-index")) - parseInt($(b).attr("data-index"));
        }));
        obj.find(".item").removeClass("is_select");
        obj.find(".item").unbind("dblclick").dblclick(function(){
            _dblclick($(this));
        });
        obj.find(".item").unbind("click").click(function(){
            _click($(this));
        });
    }

    //在列表中双击时
    var _dblclick=function(o){
        var flag = o.parent().attr("class");
        var a ;
        if(flag == "select_a"){
            a = o.clone(true);
            select_b.append(a);
            o.remove();
            option_sort(select_b);
        } else {
            a = o.clone(true);
            select_a.append(a);
            o.remove();
            option_sort(select_a);
        }
    }

    //在列表中单击时
    var temp_index=0;
    var _click=function(o){
        var flag=o.parent().attr("class");
        if(is_shift){
            var this_index=o.index();
            if(temp_index!=this_index){
                obj.find("."+flag+" .item").each(function(index, element) {
                    if(this_index>temp_index && index<this_index && index>=temp_index){
                        $(this).addClass("is_select");
                    }
                    if(this_index<temp_index && index>this_index && index<=temp_index){
                        $(this).addClass("is_select");
                    }
                });
            }
        }
        if(!is_ctrl && !is_shift){
            obj.find("."+flag+" .item").each(function() {
                $(this).removeClass("is_select");
            });
        }
        if(o.hasClass("is_select")){
            o.removeClass("is_select");
        }else{
            o.addClass("is_select");
        }
        temp_index=o.index();
    }

    //选项单击时
    obj.find(".item").click(function(){
        _click($(this));
    });

    //选项双击时
    obj.find(".item").dblclick(function(){
        _dblclick($(this));
    });

    //加入选中
    btn_a.click(function(){
        var a = select_a.find(".is_select").clone(true);
        if(a.size() == 0){
            return false;
        }
        select_b.append(a);
        select_a.find(".is_select").remove();
        option_sort(select_b);
    });

    //删除选中
    btn_b.click(function(){
        var a = select_b.find(".is_select").clone(true);
        if(a.size() == 0){
            return false;
        }
        select_a.append(a);
        select_b.find(".is_select").remove();
        option_sort(select_a);
    });

    //删除全部
    btn_c.click(function(){
        select_a.append(select_b.find("div"));
        option_sort(select_a);
    });

    //加入全部
    btn_d.click(function(){
        select_b.append(select_a.find("div"));
        option_sort(select_b);
    });
}

//页面加载完毕后
$(document).ready(function(e) {
    two_way_list_selector($("#two_way_list_selector_a"));
    two_way_list_selector($("#two_way_list_selector_b"));
});

</script>
<style type="text/css">
@charset "utf-8";
.two_way_list_selector {
    width: 100%;
    height: 250px;
}
.two_way_list_selector .select_l, .two_way_list_selector .select_r {
    width: 40%;
    height: 250px;
    float: left;
    border: 1px solid #CCC;
}
.two_way_list_selector .select_l .option {
    height: 29px;
    line-height: 29px;
    border-bottom: 1px solid #ddd;
}
.two_way_list_selector .select_l .option .l {
    width: 30%;
    float: left;
    text-indent: 10px;
}
.two_way_list_selector .select_l .option .r {
    width: 70%;
    float: right;
    text-align: center;
}
.two_way_list_selector .select_l .select_a, .two_way_list_selector .select_r .select_b {
    width: 100%;
    height: 220px;
    overflow: auto;
}
.two_way_list_selector .select_r .select_b {
    height: 250px;
}
.two_way_list_selector .select_l .select_a div, .two_way_list_selector .select_r .select_b div {
    padding: 10px;
    height: 25px;
    line-height: 25px;
    border-bottom: 1px solid #ddd;
    background: #FFF;
}
.two_way_list_selector .select_l .select_a div:last-child, .two_way_list_selector .select_r .select_b div:last-child {
    border-bottom: none;
}
.two_way_list_selector .select_btn {
    width: 10%;
    height: 250px;
    float: left;
    display: table;
    text-align: center;
}
.two_way_list_selector .select_btn div {
    height: 250px;
    display: table-cell;
    vertical-align: middle;
}
.two_way_list_selector .select_btn div input {
    width: 90%;
    margin: 1px;
    text-align: center;
    font-weight: 100;
    color: #999;
}
.two_way_list_selector .select_l .select_a .is_select, .two_way_list_selector .select_r .select_b .is_select {
    color: #FFF;
    background: #3399FF;
}
</style>
</head>

<body>
<div id="two_way_list_selector_a" class="two_way_list_selector margin_top_10">
  <div class="select_l">
    <div class="option">
      <div class="l">名称</div>
      <div class="r"><a>数量</a></div>
    </div>
    <div class="select_a">
      <div data-value="1" data-index="0" class="item">1</div>
      <div data-value="2" data-index="1" class="item">2</div>
      <div data-value="3" data-index="2" class="item">3</div>
      <div data-value="4" data-index="3" class="item">4</div>
      <div data-value="5" data-index="4" class="item">5</div>
      <div data-value="6" data-index="5" class="item">6</div>
      <div data-value="7" data-index="6" class="item">7</div>
    </div>
  </div>
  <div class="select_btn">
    <div>
      <input type="button" value=">" class="button btn_a">
      <input type="button" value=">>" class="button btn_add_all">
      <input type="button" value="<<" class="button btn_remove_all">
      <input type="button" value="<" class="button btn_b">
    </div>
  </div>
  <div class="select_r">
    <div class="select_b"></div>
  </div>
</div>

<br>

<div id="two_way_list_selector_b" class="two_way_list_selector margin_top_10">
  <div class="select_l">
    <div class="option">
      <div class="l">名称</div>
      <div class="r"><a>数量</a></div>
    </div>
    <div class="select_a">
      <div data-value="a" data-index="0" class="item">a</div>
      <div data-value="b" data-index="1" class="item">b</div>
      <div data-value="c" data-index="2" class="item">c</div>
      <div data-value="d" data-index="3" class="item">d</div>
      <div data-value="e" data-index="4" class="item">e</div>
      <div data-value="f" data-index="5" class="item">f</div>
      <div data-value="g" data-index="6" class="item">g</div>
    </div>
  </div>
  <div class="select_btn">
    <div>
      <input type="button" value=">" class="button btn_a">
      <input type="button" value=">>" class="button btn_add_all">
      <input type="button" value="<<" class="button btn_remove_all">
      <input type="button" value="<" class="button btn_b">
    </div>
  </div>
  <div class="select_r">
    <div class="select_b"></div>
  </div>
</div>

</body>
</html>
时间: 2024-10-25 20:10:06

jquery双向列表选择器DIV模拟版的相关文章

jquery双向列表选择器select版

这个是select版的,若想美化某些样式是不支持得,可以用div模拟版的,功能基本实现能用了,需要其他功能自己加上. div模拟版链接:http://www.cnblogs.com/tie123abc/p/6018755.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>双向列表选择器select版</title> <script

非常easy学习的JQuery库 : (二) 选择器

作用 选择器同意您对元素组或单个元素进行操作. 在前面的章节中,我们介绍了一些有关怎样选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是怎样准确地选取您希望应用效果的元素. jQuery 元素选择器和属性选择器同意您通过标签名.属性名或内容对 HTML 元素进行选择. 选择器同意您对 HTML 元素组或单个元素进行操作. 在 HTML DOM 术语中: 选择器同意您对 DOM 元素组或单个 DOM 节点进行操作. 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元

很容易学习的JQuery库 : (二) 选择器

一.作用 选择器允许您对元素组或单个元素进行操作. 在前面的章节中,我们介绍了一些有关如何选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是如何准确地选取您希望应用效果的元素. jQuery 元素选择器和属性选择器允许您通过标签名.属性名或内容对 HTML 元素进行选择. 选择器允许您对 HTML 元素组或单个元素进行操作. 在 HTML DOM 术语中: 选择器允许您对 DOM 元素组或单个 DOM 节点进行操作. 二.元素选择器 jQuery 使用 CSS 选择器来选取 HT

Jquery常用的选择器有哪些?

jquery 选择器. css3 选择器各种各样的选择器,作为非常灵活的 jquery 选择器到底如何使用呢?本文和大家分享的就是jquery 常用选择器种类及其原理相关内容,希望对大家 学习jquery有所帮助. 一.对于jQuery 选择器基本用法 在CSS3 选择器标淮草案定义的选择器语法中, jQuery 支持相当完整的一套子集,同时还添加了一些非标准但很有用的伪类.注意 : 本节讲述的是  jQuery 选择器.其中有不少选择器 ( 但不是全部 ) 可以在 CSS 样式表中使用.选择器

jQuery基础,选择器

jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口:具有高效灵活的cs

JQuery————基础&amp;&amp;基础选择器

环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库.在网站中找到最新版本文件的下载按钮,将jQuery框架文件下载到本地即可,本教案使用的版本为稳定版:1.9.0版. 引入jQuery文件库 下载完jQuery框架文件后,并不需要任何的安装,仅需要使用<script>文件导入标记,将jQuery框架文件导入页面中即可,假设该文件下载后保存在项目文

Jquery框架之选择器|效果图|属性|文档操作

JavaScript和jquery的区别 Javascript是一门编程语言,我们用它来编写客户端浏览器脚本. jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化javascript开发 jQuery能做的javascipt都能做到,而javascript能做的事情,jQuery不一定能做到 注意:一般情况下,是库的文件,该库中都会抛出来构造函数或者对象,如果是构造函数,那么使用new关键字创建对象,如果是对象直接调用属性和方法 DOM文档加载的步骤 解析HTML

jQuery中的选择器

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD

HTML5移动开发之路(34)——jQuery中的选择器

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(34)--jQuery中的选择器 一.jQuery是什么? jQuery是由美国人John Resig创建,至今吸引了来自世界各地的众多JavaScript高手加入其中. jQuery的创始人和技术领袖,目前在Mozilla担任JavaScript工具开发工程师.著有<Pro JavaScript Techniques>(即<精通JavaScript>)等经典JavaScript书籍. jQu