不重复自己
Not repeating myself
我正在尝试编写代码让方块在我点击它们时改变颜色:
function change(image) {
switch (image) {
case 1:
var image = document.getElementById('first');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
case 2:
var image = document.getElementById('second');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
case 3:
var image = document.getElementById('third');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
default:
var image = document.getElementById('forth');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
我一遍又一遍地重复这个部分:
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
我试图将它变成一个函数,但必须调用该函数 "image" 否则会弹出一个错误,指出图像未定义,我已经在另一个变量中使用了图像。有没有办法通过将代码放在函数中来缩短我的代码?
var IMAGES = {
1: 'first',
2: 'second',
3: 'third',
default: 'fourth'
};
function change(image) {
var imageID = IMAGES[image] || IMAGES.default;
var image = document.getElementById(imageID);
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
}
这是您代码的字面意思。但是,重新实现会更好。例如,使用背景样式而不是图像元素可以让您通过添加或删除 class.
来实现同样的效果
包括 jQuery
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
然后你可以让颜色在每次点击图像时改变,但是让函数只改变this
图像
$("img").click(function(){
$(this).src = "new src";
});
希望对您有所帮助
使用不同的变量名怎么样?
function change (image) {
switch (image) {
case 1:
changeSrc('first');
break;
case 2:
changeSrc('second');
break;
...
function changeSrc (id) {
var image = document.getElementById(id);
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
}
}
我认为你可以做的就是简单地使用 switch
定义 image
变量,然后用它做你需要的。
var image;
switch(image) {
case 1:
image = document.getElementById('first');
break;
case 2:
image = document.getElementById('second');
break;
...
}
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
如果您愿意,还可以将更改 src
的行提取到一个函数中。如果其他功能也这样做,这将很有用。
可以使用包含元素 ID 的数组,这样:
function change(image) {
var ids = [
null,
'first',
'second',
'third',
'forth'
];
var img = document.getElementById(ids[image]);
img.src = image.src.match('square1.png') ?
'squareblue1.jpg' :
'square1.png';
}
我正在尝试编写代码让方块在我点击它们时改变颜色:
function change(image) {
switch (image) {
case 1:
var image = document.getElementById('first');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
case 2:
var image = document.getElementById('second');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
case 3:
var image = document.getElementById('third');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
default:
var image = document.getElementById('forth');
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
break;
我一遍又一遍地重复这个部分:
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
我试图将它变成一个函数,但必须调用该函数 "image" 否则会弹出一个错误,指出图像未定义,我已经在另一个变量中使用了图像。有没有办法通过将代码放在函数中来缩短我的代码?
var IMAGES = {
1: 'first',
2: 'second',
3: 'third',
default: 'fourth'
};
function change(image) {
var imageID = IMAGES[image] || IMAGES.default;
var image = document.getElementById(imageID);
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
}
这是您代码的字面意思。但是,重新实现会更好。例如,使用背景样式而不是图像元素可以让您通过添加或删除 class.
来实现同样的效果包括 jQuery
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
然后你可以让颜色在每次点击图像时改变,但是让函数只改变this
图像
$("img").click(function(){
$(this).src = "new src";
});
希望对您有所帮助
使用不同的变量名怎么样?
function change (image) {
switch (image) {
case 1:
changeSrc('first');
break;
case 2:
changeSrc('second');
break;
...
function changeSrc (id) {
var image = document.getElementById(id);
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
}
}
我认为你可以做的就是简单地使用 switch
定义 image
变量,然后用它做你需要的。
var image;
switch(image) {
case 1:
image = document.getElementById('first');
break;
case 2:
image = document.getElementById('second');
break;
...
}
if (image.src.match("square1.png")) {
image.src = "squareblue1.jpg";
} else {
image.src = "square1.png";
}
如果您愿意,还可以将更改 src
的行提取到一个函数中。如果其他功能也这样做,这将很有用。
可以使用包含元素 ID 的数组,这样:
function change(image) {
var ids = [
null,
'first',
'second',
'third',
'forth'
];
var img = document.getElementById(ids[image]);
img.src = image.src.match('square1.png') ?
'squareblue1.jpg' :
'square1.png';
}