关于万年历的分析(两种方法)

关于万年历的写法,

第一步我们的理解非内置和内置的属性节点的操作,主要分为可见的和不可见的,可见的就是我们可以打开控制台明确看到的,不可见的是我们打开控制台开不到但是这个元素确实有这个属性和属性值,我们可以console.log返回控制台看到属性值;下面就以万年历为例,用非内置可见和不可见两种方法来写万年历

1 非内置可见方法来操作属性节点(setAttribute/getAttrubute);需要注意的是setAttribute既设置了一个属性又给这个属性添加了一个属性值,而getAttrubute仅仅是获得了属性值;

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
* { padding: 0; margin: 0; }
li { list-style: none; }
body { background: #f6f9fc; font-family: arial; }

.calendar { 210px; margin: 0 auto; padding: 10px 10px 20px 20px; background: #eae9e9; }
.calendar ul { 210px; overflow: hidden; padding-bottom: 10px; }
.calendar li { float: left; 58px; height: 54px; margin: 10px 10px 0 0; border: 1px solid #fff; background: #424242; color: #fff; text-align: center; cursor: pointer; }
.calendar li h2 { font-size: 20px; padding-top: 5px; }
.calendar li p { font-size: 14px; }

.calendar .active { border: 1px solid #424242; background: #fff; color: #e84a7e; }
.calendar .active p { font-weight: bold; }

.calendar .text { 178px; padding: 0 10px 10px; border: 1px solid #fff; padding-top: 10px; background: #f1f1f1; color: #555; }
.calendar .text h2 {font-size: 14px; margin-bottom: 10px; }
.calendar .text p { font-size: 12px; line-height: 18px; }


</style>
</head>
<body>
<div id="tab" class="calendar">
<ul id="box">
<li class="active"><h2>1</h2><p>JAN</p></li>
<li ><h2>2</h2><p>FER</p></li>
<li ><h2>3</h2><p>MAR</p></li>
<li ><h2>4</h2><p>APR</p></li>
<li ><h2>5</h2><p>MAY</p></li>
<li><h2>6</h2><p>JUN</p></li>
<li><h2>7</h2><p>JUL</p></li>
<li><h2>8</h2><p>AUG</p></li>
<li><h2>9</h2><p>SEP</p></li>
<li><h2>10</h2><p>OCT</p></li>
<li><h2>11</h2><p>NOV</p></li>
<li><h2>12</h2><p>DEC</p></li>
</ul>
<div class="text" id="txt">
<h2>1月活动</h2>
<p>快过年了,大家可以商量着去哪玩吧~</p>
</div>
</div>
</body>
<script type="text/javascript">
var arr=['快过年了,大家可以商量着去哪玩吧~',
'大家好好学习吧222222~~~',
'大家好好学习吧222222333~~~',
'大家好好学习吧222444222~~~',
'大家好好学习555吧222222~~~',
'大家好好学习吧666222222~~~',
'大家好好学习吧227772222~~~',
'大家好好学习吧28888822222~~~',
'大家好好学习吧99999222222~~~',
'大家好好学习10000000吧222222~~~',
'大家好好学习吧111111222222~~~',
'大家好好学习吧22222200000000000~~~']

var oli = document.querySelectorAll("#box li")
var op = document.querySelector("#txt p")
var oh2 = document.querySelector("#txt h2")
for(i=0;i<oli.length;i++){
oli[i].setAttribute("aa",i)这里就用到了非内置可见的方法添加属性和属性值,这段代码的主要意思就是给li添加一个非内置的可见属性aa,并且aa的值等于i的值,外层大循环,相当于给每一个li都设置了一个aa的属性并且依次排序
oli[i].onclick = function (){
for(j=0;j<oli.length;j++){
oli[j].className="";
this.className="active"
}
var index = this.getAttribute("aa")前面我们设置了属性和属性值,这里我们要获得我们指向的这个元素的绑定的属性的属性值,通过getAttibute
op.innerHTML=arr[index]
oh2.innerHTML=(index+1)+"月活动"
}
}

</script>
</html>

第二种写法 非内置的不可见来操作元素的属性和属性值

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
* { padding: 0; margin: 0; }
li { list-style: none; }
body { background: #f6f9fc; font-family: arial; }

.calendar { 210px; margin: 0 auto; padding: 10px 10px 20px 20px; background: #eae9e9; }
.calendar ul { 210px; overflow: hidden; padding-bottom: 10px; }
.calendar li { float: left; 58px; height: 54px; margin: 10px 10px 0 0; border: 1px solid #fff; background: #424242; color: #fff; text-align: center; cursor: pointer; }
.calendar li h2 { font-size: 20px; padding-top: 5px; }
.calendar li p { font-size: 14px; }

.calendar .active { border: 1px solid #424242; background: #fff; color: #e84a7e; }
.calendar .active p { font-weight: bold; }

.calendar .text { 178px; padding: 0 10px 10px; border: 1px solid #fff; padding-top: 10px; background: #f1f1f1; color: #555; }
.calendar .text h2 {font-size: 14px; margin-bottom: 10px; }
.calendar .text p { font-size: 12px; line-height: 18px; }


</style>
</head>
<body>
<div id="tab" class="calendar">
<ul id="box">
<li class="active"><h2>1</h2><p>JAN</p></li>
<li ><h2>2</h2><p>FER</p></li>
<li ><h2>3</h2><p>MAR</p></li>
<li ><h2>4</h2><p>APR</p></li>
<li ><h2>5</h2><p>MAY</p></li>
<li><h2>6</h2><p>JUN</p></li>
<li><h2>7</h2><p>JUL</p></li>
<li><h2>8</h2><p>AUG</p></li>
<li><h2>9</h2><p>SEP</p></li>
<li><h2>10</h2><p>OCT</p></li>
<li><h2>11</h2><p>NOV</p></li>
<li><h2>12</h2><p>DEC</p></li>
</ul>
<div class="text" id="txt">
<h2>1月活动</h2>
<p>快过年了,大家可以商量着去哪玩吧~</p>
</div>
</div>
</body>
<script type="text/javascript">
var arr=['快过年了,大家可以商量着去哪玩吧~',
'大家好好学习吧222222~~~',
'大家好好学习吧222222333~~~',
'大家好好学习吧222444222~~~',
'大家好好学习555吧222222~~~',
'大家好好学习吧666222222~~~',
'大家好好学习吧227772222~~~',
'大家好好学习吧28888822222~~~',
'大家好好学习吧99999222222~~~',
'大家好好学习10000000吧222222~~~',
'大家好好学习吧111111222222~~~',
'大家好好学习吧22222200000000000~~~']

var oli = document.querySelectorAll("#box li")
var op = document.querySelector("#txt p")
var oh2 = document.querySelector("#txt h2")


for(i=0;i<oli.length;i++){
oli[i].a=i;
//自定义不可见属性a,同时赋值i
console.log(oli[i].a)
oli[i].onclick = function (){
for(j=0;j<oli.length;j++){
oli[j].className="";
this.className="active"
}


op.innerHTML=arr[this.a]
//获得设置的自定义属性的值
oh2.innerHTML=(this.a+1)+"月活动"
}
}


</script>
</html>

 

 

原文地址:https://www.cnblogs.com/huangping199541/p/11407756.html