在想用原生js写一个数字时钟的过程中,六个div分别实现时分秒的效果,之前使用jQuery方法现在需要转化回原生方式,之前是使用attr方法进行的,但是用原生js的方式的时候就无法进行了,尝试了很多classlist等方法添加,但显示出来的样式并不会发生改变,只是控制台发生变化,该如何解决呢
//添加类名,使得显示出数字样式
function addClass(element, value) {
if (!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName += " ";
newClassName += value;
element.className = newClassName;
}
}
//克隆生成六个num
var a = 6
for (var i = 2; i <= a; i++) {
var node = document.querySelector('#num1').cloneNode(true)
var circle = document.querySelector('.circle').cloneNode(true)
node.setAttribute('id', 'num' + i)
document.querySelector('.clock').append(node)
if (i == 2 || i == 4) {
document.querySelector('.clock').append(circle)
}
}
//添加样式
for (var j = 0; j <= 9; j++) {
addClass(num1, 'num-' + j)
addClass(num2, 'num-' + j)
addClass(num3, 'num-' + j)
addClass(num4, 'num-' + j)
addClass(num5, 'num-' + j)
addClass(num6, 'num-' + j)
}
var ul = document.querySelector('.circle');
ul.parentNode.removeChild(ul);
// 获取系统当前时间
function updateClock() {
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds();
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
//转为字符串,再转为数组
hours = hours.toString().split('');
minutes = minutes.toString().split('');
seconds = seconds.toString().split('');
//jQuery中式转为数组后使用attr方法添加
//样式追加,设置多个属性值
// display1.attr('class', cssClass + hours[0])
// display2.attr('class', cssClass + hours[1])
// display3.attr('class', cssClass + minutes[0])
// display4.attr('class', cssClass + minutes[1])
// display5.attr('class', cssClass + seconds[0])
// display6.attr('class', cssClass + seconds[1])
//此处再使用上面的addClass方法无效
}
setInterval(updateClock, 1000);
updateClock();
//原来的jQuery方式定义是这样的
var
display1 = $('#num1'),
display2 = $('#num2'),
display3 = $('#num3'),
display4 = $('#num4'),
display5 = $('#num5'),
display6 = $('#num6'),
cssClass = display1.attr('class') + ' num-';
html结构如下
```html
<div class="clock">
<div id="num1" class="team">
<div class="item h top"></div>
<div class="item v left up"></div>
<div class="item v right up"></div>
<div class="item h mid"></div>
<div class="item v left low"></div>
<div class="item v right low"></div>
<div class="item h low"></div>
</div>
<div class="circle team">
<div class="up"></div>
<div class="down"></div>
</div>
</div>
```
使用这种方式试试
/获取dom节点
let img=document.querySelector('div');
img.classNameList.add("name");
还是没太看懂哪里出了问题.
var display1 = $('#num1')
function $(dom) { return document.querySelector(dom) }
cssClass = display1.attr('class') + ' num-'
class
:display1.className + ' num-'
class
:display1.className += ' hahaha'
display1.setAttribute('type', 'hour')
addClass(element, value)
这个方法中, 我不知道是否贴出了全部的js代码, 如果有声明 num1 - 6
元素的变量的话, 那这一段就没问题.