两个ul标签中的li互相移动

本文介绍了一个使用jQuery实现的示例,该示例展示了如何在两个列表之间移动列表项。通过构造JSON数据,并利用jQuery控制DOM元素,实现了列表项在两个不同列表间的交互式移动。

都是专业人员看的东西;废话不多说,直接上代码;

1、使用前请先引入jquery.js插件

CSS代码如下:

<style type="text/css">
.clearfix:before,.clearfix:after {content: " "; display: table; }
.clearfix:after {clear: both; }
.leftSide{width:300px;padding:10px;}
.leftSide .leftTop,
.leftSide .leftbotton{width:100%;clear:both;border:#dee5ec 1px solid;}
.leftSide .leftTop h2,
.leftSide .leftbotton h2{font-size: 16px; border-bottom: #dee5ec 1px solid; margin: 0 1px; line-height: 48px; padding-left: 15px; color: #000;}
.leftSide .leftbotton{margin-top:15px;}
.leftSide ul{list-style-type:none; padding:0px; }
.leftSide ul li{margin-bottom:5px;border-bottom:1px solid #fcfcfc;width:100%;display:block;clear: both;padding:5px;}
.leftSide ul li:before,.leftSide ul li:after {content: " "; display: table; }
.leftSide ul li:after {clear: both; }
.leftSide ul div{display:block;float:left;}
.leftSide ul div.btnCln{float:right;}
.leftSide ul div.btnCln .btn{background: #2890ff;border: #298df8 1px solid;color:#fff;font-size: 12px;width:45px;padding:3px 5px;}
</style>

构造前端HTML代码:

	<div class="leftSide">
		<div class="leftTop clearfix">
			<h2>字段属性</h2>
	  		<ul id="upUL">
	  		</ul>
		</div>
		<div class="leftbotton clearfix">
			<h2>字段属性</h2>
	  		<ul id="downUL"></ul>
		</div>
	</div>

构造JSON数据;使用JS控制容器事件

<script type="text/javascript">
	var djJson = [{ "id": "1", "Name": "流程启动", "Time": " 12:23", "Redact":"编辑" },
	{ "id": "2", "Name": "流程发布", "Time": "2:6", "Redact":"编辑" },
	{"id":"3","Name":"流程审批","Time":"4:0", "Redact":"编辑"},
	{"id":"4","Name":"并行网关","Time":"4:0", "Redact":"编辑"},
	{ "id": "5", "Name": "流程暂停", "Time": "5:8", "Redact":"编辑"}];
	$(function () {
		var $upUL = $("#upUL");
		var $downUL = $("#downUL");
		for (var i = 0; i < djJson.length; i++){//循环追加数据
			 $boxLi = $("<li id='" + djJson[i].id + "'><div>" + djJson[i].Name + "</div><div> &nbsp;&nbsp;使用时间" + djJson[i].Time + "</div><div class='btnCln'><a class='btn btn-primary'>" + djJson[i].Redact + "</a></div></li>");
			$upUL.append($boxLi);
		}
		$('.btn').click(function () {
			debugger
			if ($(this).parent().parent().parent().attr("id") == "upUL") {//通过判断父元素的ID来控制往哪个UL添加
				//alert('ID:' + $(this).parent().attr("id"));
				$(this).parent().parent().appendTo($downUL);
			}
			else {
				$(this).parent().parent().appendTo($upUL);
			}
		});
	});
</script>

 

完整全部代码如下:

<!DOCTYPE html>
<html>
<head>
<title>两个ul标签中的li互相移动</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="js/jquery.min.js"></script>
</head>
<body>

<style type="text/css">
.clearfix:before,.clearfix:after {content: " "; display: table; }
.clearfix:after {clear: both; }
.leftSide{width:300px;padding:10px;}
.leftSide .leftTop,
.leftSide .leftbotton{width:100%;clear:both;border:#dee5ec 1px solid;}
.leftSide .leftTop h2,
.leftSide .leftbotton h2{font-size: 16px; border-bottom: #dee5ec 1px solid; margin: 0 1px; line-height: 48px; padding-left: 15px; color: #000;}
.leftSide .leftbotton{margin-top:15px;}
.leftSide ul{list-style-type:none; padding:0px; }
.leftSide ul li{margin-bottom:5px;border-bottom:1px solid #fcfcfc;width:100%;display:block;clear: both;padding:5px;}
.leftSide ul li:before,.leftSide ul li:after {content: " "; display: table; }
.leftSide ul li:after {clear: both; }
.leftSide ul div{display:block;float:left;}
.leftSide ul div.btnCln{float:right;}
.leftSide ul div.btnCln .btn{background: #2890ff;border: #298df8 1px solid;color:#fff;font-size: 12px;width:45px;padding:3px 5px;}
</style>
<script type="text/javascript">
	var djJson = [{ "id": "1", "Name": "流程启动", "Time": " 12:23", "Redact":"编辑" },
	{ "id": "2", "Name": "流程发布", "Time": "2:6", "Redact":"编辑" },
	{"id":"3","Name":"流程审批","Time":"4:0", "Redact":"编辑"},
	{"id":"4","Name":"并行网关","Time":"4:0", "Redact":"编辑"},
	{ "id": "5", "Name": "流程暂停", "Time": "5:8", "Redact":"编辑"}];
	$(function () {
		var $upUL = $("#upUL");
		var $downUL = $("#downUL");
		for (var i = 0; i < djJson.length; i++){//循环追加数据
			 $boxLi = $("<li id='" + djJson[i].id + "'><div>" + djJson[i].Name + "</div><div> &nbsp;&nbsp;使用时间" + djJson[i].Time + "</div><div class='btnCln'><a class='btn btn-primary'>" + djJson[i].Redact + "</a></div></li>");
			$upUL.append($boxLi);
		}
		$('.btn').click(function () {
			debugger
			if ($(this).parent().parent().parent().attr("id") == "upUL") {//通过判断父元素的ID来控制往哪个UL添加
				//alert('ID:' + $(this).parent().attr("id"));
				$(this).parent().parent().appendTo($downUL);
			}
			else {
				$(this).parent().parent().appendTo($upUL);
			}
		});
	});
</script>

	<div class="leftSide">
		<div class="leftTop clearfix">
			<h2>字段属性</h2>
	  		<ul id="upUL">
	  		</ul>
		</div>
		<div class="leftbotton clearfix">
			<h2>字段属性</h2>
	  		<ul id="downUL"></ul>
		</div>
	</div>

</body>
</html> 

 

这是由优快云和外部合作伙伴合作研发的ai作业模型机器人,很高兴为您服务。 以下是一个使用 Vue2 实现 **两个页签切换** 的完整示例,采用 `<ul><li>` 结构,点击“全部”和“最新”页签时切换列表内容,并在**选中页签下显示一条与文字等宽的横线指示器**,视觉效果清晰且具备动画过渡。 --- ```vue <template> <div class="tab-wrapper"> <!-- 页签导航 --> <ul class="tabs"> <li v-for="tab in tabs" :key="tab.key" :class="{ active: activeTab === tab.key }" @click="switchTab(tab.key)" > {{ tab.label }} </li> <!-- 指示器:下方横线 --> <li class="indicator" :style="indicatorStyle"></li> </ul> <!-- 内容展示 --> <ul class="content-list"> <li v-for="item in displayedList" :key="item.id" class="list-item"> {{ item.text }} </li> </ul> </div> </template> <script> export default { data() { return { activeTab: 'all', // 当前激活的页签 tabs: [ { key: 'all', label: '全部' }, { key: 'latest', label: '最新' } ], allList: [ { id: 1, text: '这是全部内容的第一条' }, { id: 2, text: '这是全部内容的第二条' }, { id: 3, text: '这是全部内容的第三条' } ], latestList: [ { id: 4, text: '这是最新的内容' } ] }; }, computed: { displayedList() { return this.activeTab === 'all' ? this.allList : this.latestList; } }, methods: { switchTab(tab) { this.activeTab = tab; }, updateIndicator() { this.$nextTick(() => { const tabItems = this.$el.querySelectorAll('.tabs li:not(.indicator)'); const activeIndex = this.tabs.findIndex(t => t.key === this.activeTab); if (activeIndex >= 0 && tabItems[activeIndex]) { const el = tabItems[activeIndex]; this.indicatorStyle = { width: `${el.offsetWidth}px`, transform: `translateX(${el.offsetLeft}px)` }; } }); } }, mounted() { this.updateIndicator(); }, updated() { this.updateIndicator(); } }; </script> <style scoped> .tab-wrapper { padding: 16px; font-family: Arial, sans-serif; } /* 页签容器 */ .tabs { display: flex; position: relative; list-style: none; margin-bottom: 12px; padding: 0; border-bottom: 1px solid #ddd; } /* 单个页签样式 */ .tabs li { padding: 8px 16px; cursor: pointer; font-size: 16px; color: #333; transition: color 0.3s ease; } /* 激活状态文字颜色 */ .tabs li.active { color: #007bff; font-weight: 500; } /* 指示器:底部横线 */ .indicator { position: absolute; bottom: -1px; /* 覆盖在边框上 */ left: 0; height: 2px; background-color: #007bff; transition: transform 0.3s ease, width 0.3s ease; } /* 内容列表 */ .content-list { list-style: none; padding: 0; } .list-item { padding: 10px; border: 1px solid #eee; margin-bottom: 6px; background-color: #f9f9f9; border-radius: 4px; } </style> ``` --- ### ✅ 功能说明 - 使用 `<ul><li>` 构建页签,语义清晰。 - 点击切换页签,动态更新显示内容。 - **底部蓝色横线(`.indicator`)自动对齐到当前选中的页签下方**,宽度与文字一致。 - 横线通过 `transform: translateX()` 移动,支持平滑动画。 --- ### 知识点 1. **动态样式绑定(`:style`)** 使用 JavaScript 计算 DOM 尺寸并设置 `width` 和 `transform`,实现精准定位。 2. **Vue `$nextTick` 机制** 在 DOM 更新后获取元素真实宽高,确保尺寸计算准确。 3. **CSS 定位与过渡动画** `position: absolute` 配合 `transition` 实现流畅下划线滑动效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值