左移与右移

  • 编写网页,设置CSS完成左移右移的结构和样式设置。
  • 通过层级选择器和表单选择器获取选中的操作项。
  • 通过append()方法将匹配到的内容追加到指定元素的尾部。

效果如下:

jquery左右按钮滚动切换 jquery实现div左右移动_sass

jquery左右按钮滚动切换 jquery实现div左右移动_子节点_02

左移和右移和全部 左移和右移效果实现。

代码如下:

HTML部分:

<body>
    <div class="container">
        <div class="content-box">
            <div class="content-left">
                <div class="title left-title">可选项</div>
                <select class="itembox left" id="left" multiple>
                    <option class="item">添加</option>
                    <option class="item">移动</option>
                    <option class="item">修改</option>
                    <option class="item">查询</option>
                    <option class="item">打印</option>
                    <option class="item">删除</option>
                </select>
            </div>
            <div class="content-middle">
                <button class="remove remove-right">></button>
                <button class="remove remove-left"><</button>
                <button class="remove remove-right-all">>></button>
                <button class="remove remove-left-all"><<</button>
            </div>
            <div class="content-right">
                <div class="title right-title">已选项</div>
                <select class="itembox right" id="right" multiple>
                </select>
            </div>
        </div>
    </div>
</body>

css部分代码如下:

<style>
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            margin-top: 200px;
            margin-left: 200px;
        }
        .content-box {
            display: flex;
            width: 336px;
            height: 300px;
            flex-direction: row;
            justify-content: space-between;
        }
        .title {
            font-size: 20px;
            height: 30px;
            line-height: 30px;
            margin-bottom: 10px;
        }
        .select {
            text-decoration: none;
            outline: none;
        }
        .itembox {
            padding: 6px;
            width: 120px;
            height: 160px;
            text-align: center;
            outline: none;
            text-decoration: none;
            border: 1px solid rgb(167, 164, 164);
            /* box-sizing: border-box; */
        }
        .content-middle {
            margin-left: 20px;
        }
        .remove {
            margin-bottom: 4px;
            width: 60px;
            height: 20px;
            line-height: 20px;
            text-align: center;
            background-color: rgb(214, 219, 218);
            border-radius: 2px;
            border: 1px solid rgb(167, 164, 164);
            box-sizing: border-box;
        }
        .remove:nth-child(1) {
            margin-top: 80px;
        }
    </style>

JQuery部分代码如下:

记得加入script引入jquery 的js文件

<script>
        //右移事件实现
        $('.remove-right').click(function () {
            $('.itembox .item:selected').remove().appendTo('#right').prop('selected', false)
        })
        //左移事件实现
        $('.remove-left').click(function () {
            $('.itembox .item:selected').remove().appendTo('#left').prop('selected', false)
        })
        //全部右移事件实现
        $('.remove-right-all').click(function () {
            $('#left>option').remove().appendTo('#right').prop('selected', false)
        })
        //全部左移事件实现
        $('.remove-left-all').click(function () {
            $('#right>option').remove().appendTo('#left').prop('selected', false)
        })
    </script>

改进代码,或者说是另一种写法,基本原理使用选中的项目给他增加类名和删除类名。

这次直接写全部的代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul,
        li {
            list-style: none;
        }

        .box {
            width: 400px;
            margin: 60px auto 0;
            display: flex;
        }

        .box-item {
            width: 150px;
        }

        .box-item>.item-title {
            font-size: 16px;
            text-align: center;
        }

        .box-item>.item-list {
            margin-top: 10px;
            padding: 10px;
            height: 200px;
            border: 1px solid #ccc;
        }

        .box-item .list-item {
            line-height: 1.6;
        }

        .box-item .list-item.active {
            background-color: #eee;
        }

        .box-btns {
            margin: 0 20px;
            width: 60px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }

        .box-btns>.item-btn {
            width: 100%;
            height: 26px;
            margin-bottom: 6px;
            background-color: #eee;
            border: 1px solid #ccc;
            text-align: center;
            line-height: 26px;
            border-radius: 2px;
            cursor: pointer;
        }
    </style>
</head>

<body>

    <div class="box">
        <div class="box-item">
            <div class="item-title">可选项</div>
            <ul class="item-list jq-leftbox">
                <li class="list-item">添加</li>
                <li class="list-item">移动</li>
                <li class="list-item">修改</li>
                <li class="list-item">查询</li>
                <li class="list-item">打印</li>
                <li class="list-item">删除</li>
            </ul>
        </div>
        <div class="box-btns">
            <div class="item-btn jq-right">></div>
            <div class="item-btn jq-left"><</div>
            <div class="item-btn jq-rightall">>></div>
            <div class="item-btn jq-leftall"><<</div>
        </div>
        <div class="box-item">
            <div class="item-title">已选项</div>
            <ul class="item-list jq-rightbox">
            </ul>
        </div>
    </div>


    <script src="./js/jquery.min.js"></script>
    <script>
        $(function () {
            let _leftbox = $('.jq-leftbox'),
                _rightbox = $('.jq-rightbox');

            // 点击每个列表实现选中效果
            $('.list-item').click(function () {
                $(this).toggleClass('active');
            });

            $('.jq-right').click(function () {
                _rightbox.append(_leftbox.find('.list-item.active'));
            });

            $('.jq-left').click(function () {
                _leftbox.append(_rightbox.find('.list-item.active'));
            });

            $('.jq-rightall').click(function () {
                _rightbox.append(_leftbox.find('.list-item'));
            });

            $('.jq-leftall').click(function () {
                _leftbox.append(_rightbox.find('.list-item'));
            });
        });
    </script>
</body>

</html>

记得引入JQuery文件。

用到JQuery里面的DOM操作。

相关知识点:

DOM节点操作

1.节点追加

节点追加指的是在现有的节点树中,进行父子或兄弟节点的追加

  • 父子节点添加指的是在匹配到的元素内部添加指定的content内容。
  • 兄弟节点指的是在匹配到的元素外部添加指定的content内容。

语法

作用

说明

父子节点

append(content)

把content内容追加到匹配的元素内容尾部

父子节点

prepend(content)

把content内容追加到匹配的元素内容头部

父子节点

appendTo(content)

把匹配到的内容插入到content内容的尾部

父子节点

prependTo(content)

把匹配到的内容插入到content内容的头部

兄弟节点

after(content)

把content内容插入到元素的尾部

兄弟节点

before(content)

把content内容插入到元素的头部

兄弟节点

insertAfter(content)

把所有匹配的内容插入到content元素的尾部

兄弟节点

insertBefore(content)

把所有匹配的内容插入到content元素的头部

2 节点替换

节点替换是指将选中的节点替换为指定的节点

语法

说明

replaceWith(content)

将所有匹配的元素替换成指定的HTML或DOM元素

replaceAll(selector)

用匹配的元素替换掉所有selector匹配到的元素

replaceWith()方法的参数是一个函数时,它的返回值类型必须是字符串类型,用于完成指定元素的替换操作。

3 节点删除

语法

说明

empty()

清空元素的内容,但不删除元素本身

remove([expr])

清空元素的内容,并删除元素本身(可选参数expr用于筛选元素)

detach([expr])

从DOM中删除所有匹配的元素(保留所有绑定的事件、附加的数据等)

  • empty()方法仅能删除匹配元素的文本内容,而元素节点依然存在。
  • remove()方法则可以同时删除匹配元素本身和文本内容。

4 节点复制

语法

说明

clone([false])

复制匹配的元素并且选中这些复制的副本,默认参数为false

clone(true)

参数设置为true时,复制元素的所有事件处理

开发中若在复制元素节点时,想要同时复制该节点的所有事件的处理,则可以将clone()方法的操作设置为true,否则节点复制时使用默认操作false即可。