关于DOM编程艺术里的moveElement加单引号的问题

来源:10-1 编程挑战

qq_兜里有米_04383258

2017-07-03 23:30

function positionMessage(){
	var elem=document.getElementById("message");
	elem.style.position="absolute";
	elem.style.top="100px";
	elem.style.left="50px";
	moveElement("message",200,100,10);
	// movement=setTimeout("moveMessage()",5000);//movement在这里是全局变量,因此可以在函数以外的地方被取消
}
addLoadEvent(positionMessage);

function moveElement(elemID,final_x,final_y,interval){
	//elemID传入为 "message"
	//传入时已经带有冒号,因此不能再传入冒号,否则无法获取元素ID的值
	var elem=document.getElementById(elemID);
	
	var xpos=parseInt(elem.style.left);
	var ypos=parseInt(elem.style.top);
	if(xpos==final_x && ypos==final_y)return true;
	if(xpos<final_x)xpos++;
	if(xpos>final_x)xpos--;
	if(ypos<final_y)ypos++;
	if(ypos>final_y)ypos--;
	elem.style.left=xpos+"px";
	elem.style.top=ypos+"px";
	var repeat="moveElement('" + elemID + "'," + final_x + "," + final_y + "," + interval + ")";
	movement=setTimeout(repeat,interval);//递归
}

我想问的是  为什么在第一次调用moveElement时参数elemID不需要带引号,而通过递归再次调用moveElement时elemID要加上引号了(即repeat中的单引号)。

我从网上已经查了,基本已经明白了加引号的目的是moveElement中的setTimeout的第一个参数必须是字符串。

但是我觉得有一个冲突是:

第一次调用moveElement时,传入的实参时带引号的message,即"message".所以在var elem=document.getElementById(elemID);这里,elemID不用加引号。之前代码一直不对就是这里加了引号导致效果显示不出来。

那既然传入的实参已经加了引号,那为什么再次调用moveElement时却要给elemID加一个单引号呢


写回答 关注

1回答

  • 油炸小香瓜3192649
    2017-07-07 17:29:43

    第一次传入的实参是字符串,即 "message", 再次调用 var repeat="moveElement('" + elemID + "'," + final_x + "," + final_y + "," + interval + ")"; 里面 elemID 是一个对象,添加加引号,才会变为字符串

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题