用新图像替换旧图像。JavaScript
我有一个函数,可以将用户输入的图像放入html页面的主体中。当收到第二个输入时,我想用新的图片替换这张图片。我试图在下面的函数中实现这一点用新图像替换旧图像。JavaScript,javascript,Javascript,我有一个函数,可以将用户输入的图像放入html页面的主体中。当收到第二个输入时,我想用新的图片替换这张图片。我试图在下面的函数中实现这一点 function show_image(src, alt) { var img = document.createElement("img"); img.src = src; img.width = 400; img.height = 300; img.alt = alt;
function show_image(src, alt) {
var img = document.createElement("img");
img.src = src;
img.width = 400;
img.height = 300;
img.alt = alt;
var counter;
var mynodes= new Array();
mynodes.push(img);
counter+=1;
if(counter==1){
// This next line will just add it to the <body> tag
document.body.appendChild(img);
}
else if(counter!=1)
{
var newNode=mynodes[counter-1];
var oldNode=mynodes[counter-2];
document.body.replaceChild(newNode,oldNode);
}
函数显示图像(src,alt){
var img=document.createElement(“img”);
img.src=src;
img.width=400;
img.高度=300;
img.alt=alt;
var计数器;
var mynodes=新数组();
mynodes.push(img);
计数器+=1;
如果(计数器==1){
//下一行只是将其添加到标记中
文件.正文.附件(img);
}
否则如果(计数器!=1)
{
var newNode=mynodes[counter-1];
var oldNode=mynodes[counter-2];
document.body.replaceChild(newNode、oldNode);
}
变量计数器
是一个局部变量。
每次调用该方法时,计数器都初始化为0
与mynodes
变量相同。它在数组中始终只有一个节点
因此,您可能需要在此处更改逻辑。是否需要帮助重新编写此函数?您的代码非常笨拙。据我所知,您可以简单地更改相同的img标记,而不是每次更改整个节点。几乎没有理由使用此函数 我放了一个面向对象的例子,这使得你的逻辑非常可重用和友好
我决定在index.html文件中隐藏一张图片,然后用$(“#my_image”).attr(“src”,“img/fire.gif”)更改src,而不是创建一个函数来动态更改图片(确实有效)##my_image是图像标记的id。
var counter;counter+=1;
为您提供一个NaN
,因为您从未为计数器分配值,所以它是未定义的,将1添加到未定义会为您提供一个NaN(不是数字)。此外,由于您在函数中定义了计数器,因此它将永远不会递增,因为每次调用函数时它都会重新定义。您的计数器变量未初始化。counter+=1;
将只分配NaN
到计数器。因此counter!=1
将为真,但counter-1
和counter-2将是NaN,因此newNode
和oldNode
将是未定义的谢谢!如果允许,我会接受。他不需要重构这个函数,他需要重构整个apprach。替换img标签毫无意义。
function changeImg(img, src, alt) {
//I doubt you even need a function for this.
img.src = src;
img.alt = alt;
}
var img = document.createElement('img');
//you could just use a css class instead...
//that's probably better anyway...why does your js care how it looks?
img.width = 400;
img.height = 300;
document.body.appendChild(img);
changeImg(img, 'http://static.jsbin.com/images/favicon.png', 'image');
var imgSrcInput = document.getElementById('imgSrc');
var imgAltInput = document.getElementById('imgAlt');
var button = document.getElementById('change');
button.addEventListener('click', function() {
changeImg(img, imgSrcInput.value, imgAltInput.value);
});
window.onload = function() { //usage
var someElement = document.getElementById('someIdHere');
var anotherElement = document.getElementById('anotherIdHere');
imageReplacer.setup({
element: someElement,
initSrc: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRg-icdkibfDt8VE7FkaKZyVUh8SBR4YTGd-2Jz1wZeUVacv4YD8zrvwclN',
initAlt: 'Starting Image'
});
imageReplacer.setup({
element: anotherIdHere,
initSrc: 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRrHWuOzgYPbsuSF9cYQo3ORkcdIC4-8xaszlCrI3f7arAC7vhV7HwMN_fG',
initAlt: 'Starting Image'
});
};
var imageReplacer = { //package up your app
setup : function(options) {
//create a new imageReplacer so that each one will operate independently. The "this" pointer will refer to each element's imageReplacer.
options.element.imageReplacer = Object.create(imageReplacer);
options.element.imageReplacer.makeReplacer(options);
},
makeReplacer : function(options) {
options.element.className = 'imageReplacer';
var markup = this.createMarkup();
this.changeImage(options.initSrc, options.initAlt);
this.addClick(this.button);
options.element.appendChild(markup);
},
createMarkup : function() {
var frag = document.createDocumentFragment();
this.srcInput = document.createElement('input');
this.srcInput.type = 'text';
this.srcInput.placeholder = 'Image Source';
this.altInput = document.createElement('input');
this.altInput.type = 'text';
this.altInput.placeholder = 'Image Alt';
this.button = document.createElement('button');
this.button.textContent = 'Change Image';
this.imgTag = document.createElement('img');
frag.appendChild(this.srcInput);
frag.appendChild(this.altInput);
frag.appendChild(this.button);
frag.appendChild(this.imgTag);
return frag;
},
addClick : function(button) {
var that = this;
button.addEventListener('click', function() {
that.changeImage(that.srcInput, that.altInput);
});
},
changeImage : function(src, alt) {
this.imgTag.src = src;
this.imgTag.alt = alt;
}
};