自定义属性和tab栏切换

1.获取元素属性值通过:element.属性,获取自定义属性值:element.getAttribute('属性')

<div getTime="20"  data-index="1" data-list-name="andy"></div>
		<!-- 上面的getTime是自定义属性,我们不能通过div.getTime进行获取 -->
		<script type="text/javascript">
			var div = document.querySelector('div');
			console.log(div.getTime);
			// 因为这个是自定义属性,通过上面的方法无法进行获取
			console.log(div.getAttribute('getTime'))
		</script>

 2.修改元素 增加一个指定名称和值的新属性,或者把一个现有属性设定为指定的值 elementNode.setAttribute(name,value)

// 增加一个指定名称和值的新属性,或者把一个现有属性设定为指定的值
			// elementNode.setAttribute(name,value)
			div.setAttribute('data-index','2')
			//这个是在div里面创建一个data-index   并且将他的值赋值为2

         补充:1)H5 设置的自定义属性  H5  定义的 以  data-开头作为属性名并赋值的方式  肯定是自定义属性

<div getTime="20"  data-index="1" data-list-name="andy"></div>
		<!-- 这种方式设置的属性,我们可以使用getAttribute来获取 主要掌握这种方式进行获取后面的获取方式作为参考就可以  这种方式不存在兼容性的问题 -->
		<script type="text/javascript">
		 // 获取自定义属性的值 ,
		 // 1)这个是考虑兼容性的获取方式  getAttribute进行获取就可以了
			console.log(div.getAttribute('data-index'))
			
			// 2)H5新增的获取自定义属性值得方法  dataset 有严重的兼容性问题
			// 该方法在获取自定义属性名的时候,是不需要加上data,直接跟上data后面的属性名就可以,但是当名字的连接符号大于2的时候,后面的属性名采取的是驼峰命名写在后面,进行获取数值
			console.log(div.dataset)
			// dataset 是一个集合 里面存放的是所有以data开头的自定义属性
			console.log(div.dataset.index);
			// 这个是取出data对象里面的index属性
			console.log(div.dataset['index']);
			// 调用属性还有一种方法  对象名['属性名']

注意点:获取 data-list-name 的属性值得时候,书写方法的不同:

// 获取 data-list-name 的属性值得时候,书写方法的不同
		console.log(div.getAttribute('data-list-name'));
		// 这种是可以直接获取data-list-name的属性值
		
		console.log(div.dataset.listName);
		console.log(div.dataset['listName']);
		
		// 这种方式获取的时候,后面的属性名是将原来的连接符进行删除,然后后面的属性名采取的是驼峰命名法,

 tab栏切换案例 布局分析:

1.tab栏切换分为两个大模块
2.上面的模块选项卡,点击某一个,当前这一个底色变为pink色,其余的颜色不变(排他思想)修改类名的方式 
3.下面的模块内容,会跟随上面选项卡变化。所以下面模块的变化写到点击事件里面。
4.规律,下面的模块显示内容和上面的选项卡内容一一对应,相匹配 
5.核心思路:给上面的tab_list里面的所有li添加自定义属性,属性值从0开始编号。
6.当我们点击tab_list里面的某个li,让tab_list里面对应序号的内容显示,其余隐藏(排他思想)。

重点:还是排他思想的理解和使用

<style>
			* {
				margin: 0;
				padding: 0;
			}

			li {
				list-style: none;
			}

			.tab {
				width: 1000px;
				margin: 100px auto;
			}

			.tab_list {
				background-color: #ccc;
			}

			.current {
				background-color: pink;
			}

			ul {
				height: 50px;
				line-height: 50px;
				text-align: center;
				display: flex;
			}

			ul>li {
				float: left;
				flex: 1;
			}

			.item {
				display: none;
			}
		</style>

	</head>
	<body>
		<div class="tab">
			<div class="tab_list">
				<ul>
					<li class="current">商品介绍</li>
					<li>规格与包装</li>
					<li>售后保障</li>
					<li>商品评价(50000)</li>
					<li>手机社区</li>
				</ul>
			</div>
			<div class="tab_con">
				<div class="item" style="display: block;">
					商品介绍模块内容
				</div>
				<div class="item">
					规格与包装模块内容
				</div>
				<div class="item">
					售后保障模块内容
				</div>
				<div class="item">
					商品评价模块内容
				</div>
				<div class="item">
					手机社区模块内容
				</div>

			</div>
		</div>
<script>
			// 1)获取元素    现在需要获取的是上面所有的li标签
			var lis = document.querySelector('.tab_list').querySelectorAll('li');
			var items = document.querySelectorAll('.item')
			// console.log(lis);
			// console.log(items);
			// 通过循环给里面的每一个li 添加点击事件
			// 实现了上面点击某个选项卡,该选项卡变色,其他的选项卡不变色
			for (var i = 0; i < lis.length; i++) {
				lis[i].setAttribute('index', i)
				// 创建一个自定义变量,对lis里面的属性值进行编号
				// 这里面的 i 是索引编号,给index 赋值的时候不需要加上索引号,加上索引号就变成字符,就无法获取前面i的数值
				lis[i].onclick = function() {
					// 排他思想的使用:首先将他们的颜色进行去除,然后点击某一个li的时候,该li变换颜色为pink色
					for (var i = 0; i < lis.length; i++) {
						lis[i].className = '';
					}
					this.className = 'current';
					// 2.当我们点击某一个选项卡,底下的对应内容会随着变化  下面的显示内容模块的制作
					var index = this.getAttribute('index');
					// console.log(index);
					//排他思想的使用:点击某一个 tb_list,就显示对应底下的li标签的内容,但是其他的li标签的内容就进行隐藏,不显示
					// 排他的思想就是干掉其他人,只留下自己
					for (var i = 0; i < items.length; i++) {
						// 这里是当用户没有进行点击时,所有的元素保持当前的显示情况,不进行变化   这里是让底下的内容不显示
						items[i].style.display = '';
					}
					// 当点击某一个li时i,该li对应的内容进行显现
					items[index].style.display = 'block';

				}
			}
		</script>

tab栏切换下方的图片(解决思路和方法基本相同)

<style>
			* {
				margin: 0;
				padding: 0;
			}
		
			li {
				list-style: none;
			}
		
			.tab {
				width: 1000px;
				margin: 100px auto;
			}
		
			.tab_list {
				background-color: #ccc;
			}
		
			.current {
				background-color: pink;
			}
		
			ul {
				height: 50px;
				line-height: 50px;
				text-align: center;
				display: flex;
			}
		
			ul>li {
				float: left;
				flex: 1;
			}
			.item {
				display: none;
			}
			.item>img{
				width: 1000px;
			}
		</style>
		
	</head>
	<body>
		<div class="tab">
			<div class="tab_list">
				<ul>
					<li class="current">所</li>
					<li>见</li>
					<li>即</li>
					<li>所</li>
					<li>得</li>
				</ul>
			</div>
			<div class="tab_con">
				<div class="item" style="display: block;">
					<img src="image/1.jpg" alt="">
				</div>
				<div class="item">
					<img src="image/2.jpg" alt="">
				</div>
				<div class="item">
					<img src="image/3.jpg" alt="">
				</div>
				<div class="item">
					<img src="image/4.jpg" alt="">
				</div>
				<div class="item">
					<img src="image/5.jpg" alt="">
				</div>
			</div>
		</div>
	</body>
<script>
			// 1)获取元素   获取顶部的所有li标签
			var lis = document.querySelector('.tab_list').querySelectorAll('li');
			var items = document.querySelectorAll('.item');
			// console.log(lis);
			// console.log(items);
			// 1)给上面的每一个选项卡添加一个点击事件,因为是给所有的选项卡进行添加,所以需要用到for循环给每一个选项卡添加
			for(var i = 0 ; i<lis.length ; i++){
				lis[i].setAttribute('index',i);
				// 创建一个自定义变量,对lis里面的属性值进行编号
				// 这里面的 i 是索引编号,给index 赋值的时候不需要加上索引号,加上索引号就变成字符,就无法获取前面i的数值
				
				// 给每一个选项卡都添加点击事件
				lis[i].onclick = function(){
			// 这里考虑的是排他思想的使用,当点击之后将其他选项卡的颜色去除掉,只保留被点击的选项卡的颜色
					for(var i = 0 ; i<lis.length ; i++){
						lis[i].className = '';
					}
					this.className='current';
					//2) 下面的选项卡所显示的内容,与用户点击的选项卡所对应,这里就需要用到一个变量,让这个变量与用户点击选项卡之后,解决两者之间的匹配问题,这里就需要给选项卡进行编号
					// 获取当前点击选项卡的index 的属性值
					var index = this.getAttribute('index');
					console.log(index);
					// 这里使用的也是排他思想的使用,当用户点击选项卡的时候,选项卡对应的内容显现出来,没有被点击的内容进行隐藏,不显示在页面之上,所以这里也需要对下面选项卡对应的内容进行遍历
					for(var i=0 ; i<items.length ; i++){
					// 这里是当用户没有进行点击时,所有的元素保持当前的显示情况,不进行变化   相当于让底下的内容不显示出来
						items[i].style.display ='none';
					}
					// 当用户点击的时候,让用户点击选项卡所对应的内容显示出来
					items[index].style.display= 'block';
				}
			}	
		</script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值