javascript - 把ID名作为参数传到函数里,使用不了?
阿神
阿神 2017-04-11 12:00:37
[JavaScript讨论组]


 
  
  
  
  
  
  定时器-移动
  
 


 
  

阿神
阿神

闭关修行中......

全部回复(10)
巴扎黑
var x = 'p'; // 注意字符串要加引号
var obj = document.getElementById(x); // 这边是x已经是变量,所以就不用再加引号了哦
console.log(obj);
天蓬老师

看了好几遍确定是双引号不是俩单引号,我还以为我眼花了……

<html>
<body>
  <p id="p"></p>
</body>

<script>
//设定一个变量x代替ID名为p的元素;
    var x=p;
    var obj=document.getElementById(""+ x +""); //这么一看挺萌的
    console.log(obj);
</script>
</html>
阿神
var x='p';
var obj=document.getElementById(x);
console.log(obj);
迷茫

· "p" .没有id是‘“p”’的

天蓬老师
var obj=document.getElementById(id); 

obj是一个DOM对象,不是jQuery对象,没有css("left", a),应该obj = $('#'+id)

高洛峰

修改成这样就可以了

<script>
var a=0;
function move(obj,time){
    var t=setInterval(function(){
       a=a+1;
        if(a<=200 && a>=0){
            obj.css("left",a);
        }
        else{
            clearInterval(t);
        }
    },time)
}
move($("#p"),10);
move($("#p2"),500);

</script>
迷茫

你直接传id名就是对象了,不用再加引号,也不用再getElementById了,你在move函数里面console.log(idName)出来的就是<p id="p"></p>;另外obj是原生DOM对象,需要加上$,即调用css方法时将obj改成$(obj)

所以你的代码需要改两处,最终如下,应该是你要的结果:

var a=0;
function move(idName,time){
    
    var obj=idName;//直接传给obj
    var t=setInterval(function(){
       a=a+1;
        if(a<=200 && a>=0){
            $(obj).css("left",a);//使用$(obj)调用css方法
        }
        else{
            clearInterval(t);
        }
    },time)
}

move(p,1000);
巴扎黑

move(p, 1000)? p都没有定义吧好像。不应该是move('p', 1000)吗?

直接使用jquery的话,在move函数里边可以直接var obj = $('#' + idName);就O了。

不使用jquery的话也是可以的:var obj = document.getElementById(idName);
改变left值使用:obj.style.left = a + 'px';就可以了。

ringa_lee

你的想法是传入一个id,可是你传入的是一个未申明的变量
正确的做法是

move("p",1000)

或者

var nodeID = "p"
move(nodeID,1000)

另外你想打印:<p id="p"></p>的话
应该是

console.log(obj)
黄舟
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>定时器-移动</title>
  <script type="text/javascript" src="jquery-1.10.1.min.js"></script>
 </head>

<style>
 #p{width:100px;height:100px;background:red;position:absolute; top:100px;}
 
</style>
 <body>
  <p id="p"></p>
<script>
var a=0;
function move(idName,time){
    var id='"'+idName+'"';
//下行打印的id值为"[object HTMLpElement]",但是我实际想要的效果是<p id="p"></p>;
    console.log(id);
    var obj=document.getElementById(id);
    var t=setInterval(function(){
       a=a+1;
        if(a<=200 && a>=0){
            obj.css("left",a);
        }
        else{
            clearInterval(t);
        }
    },time)
}

move(p,1000);

</script>


 </body>
</html>

1.p变量对应为id属性值为p的HTML元素,如果你的把<p id="p"></p>改成<p id="p1234"></p><span id="p"></span> 看看效果
这是浏览器的行为,是一个很不好的行为,会引起代码混乱~~~
2.在浏览器行为下,传递了一个HTML元素给move函数,var id='"'+idName+'"';执行字符串拼接,HTML转成字符串[object HTMLpElement]``

解决方法:
定义一个变量其值为对应的id值,消除变量歧义

var pIdName="p";
move(pIdName,1000);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号