關(guān)于DOM編程藝術(shù)里的moveElement加單引號(hào)的問(wèn)題
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在這里是全局變量,因此可以在函數(shù)以外的地方被取消 } addLoadEvent(positionMessage); function?moveElement(elemID,final_x,final_y,interval){ //elemID傳入為?"message" //傳入時(shí)已經(jīng)帶有冒號(hào),因此不能再傳入冒號(hào),否則無(wú)法獲取元素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);//遞歸 }
我想問(wèn)的是 ?為什么在第一次調(diào)用moveElement時(shí)參數(shù)elemID不需要帶引號(hào),而通過(guò)遞歸再次調(diào)用moveElement時(shí)elemID要加上引號(hào)了(即repeat中的單引號(hào))。
我從網(wǎng)上已經(jīng)查了,基本已經(jīng)明白了加引號(hào)的目的是moveElement中的setTimeout的第一個(gè)參數(shù)必須是字符串。
但是我覺(jué)得有一個(gè)沖突是:
第一次調(diào)用moveElement時(shí),傳入的實(shí)參時(shí)帶引號(hào)的message,即"message".所以在var elem=document.getElementById(elemID);這里,elemID不用加引號(hào)。之前代碼一直不對(duì)就是這里加了引號(hào)導(dǎo)致效果顯示不出來(lái)。
那既然傳入的實(shí)參已經(jīng)加了引號(hào),那為什么再次調(diào)用moveElement時(shí)卻要給elemID加一個(gè)單引號(hào)呢
2017-07-07
第一次傳入的實(shí)參是字符串,即 "message", 再次調(diào)用 var?repeat="moveElement('"?+?elemID?+?"',"?+?final_x?+?","?+?final_y?+?","?+?interval?+?")"; 里面?elemID 是一個(gè)對(duì)象,添加加引號(hào),才會(huì)變?yōu)樽址?/p>