求答案,js中for循环了,但是数组里i的值只显示最后循环结束的值,搞了一晚上了没搞对,求大神指教

qq_36169545 2016-10-13 04:25:43



贴出代码,p_tag[i].parentNode.insertBefore(create_br,p_tag[i])中的i为13,而alert(i)中的i值从0-13;
不知道什么问题,搞了一晚上了。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>各行添加样式</title>
<style type="text/css">
p{font:400 20px/30px "微软雅黑";background-color: red;display: inline;}
</style>
<script type="text/javascript">
function addBrTag(){
if(!document.getElementsByTagName) return false;
var p_tag=document.getElementsByTagName("p");
var create_br=document.createElement("br");


for(var i=0;i<p_tag.length;i++){

p_tag[i].parentNode.insertBefore(create_br,p_tag[i]);

alert(i);

}

}
</script>


</head>
<body>
<div id="demo"></div>
<p>1.我是个好人。</p>
<p>2.卧槽这你也信。</p>
<p>3.你这么还不是好人。</p>
<p >4.我做了什么事好人。</p>
<p>5.比我还穷,居然信我把钱都给我,还不是好人。</p>
<p>6.这只能说你骗术很高我被骗了。</p>
<p>7.不是,不是这个原因,是你快饿死了。</p>
<p>8.表示不懂?请解释。</p>
<p>9.老实和好人都不会活得很长,死的快。</p>
<p>10.你错了,老实人和好人是因为最笨迂腐而饿死的。</p>
<p>11.那你属于哪一种。</p>
<p>12.我哪一种都不是,我是脑子反应慢。</p>
<p>13.那你岂不是快要饿死了。</p>
<p>14.是的,快要饿死了。</p>

</body>
</html>
...全文
676 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vytao 2016-10-13
  • 打赏
  • 举报
回复
你只是定义了函数
addBrTag
,并没有调用它,它没有执行
qq_36169545 2016-10-13
  • 打赏
  • 举报
回复
修改了一下,没有什么改变还和以前的一样。
引用 2 楼 zzgzzg00 的回复:
闭包问题 写在立即执行的函数里 如果只支持高版本浏览器的话 把for里的var改成let就可以了
qq_36169545 2016-10-13
  • 打赏
  • 举报
回复
大神,一下就搞定这个问题了,本人新手一个。 大神,可以问一下为什么吗?网上也找了答案,没有相关的解释,for出这样的问题,大部分是说什么闭包的问题。可是怎么看都和闭包函数没关系(本人学习时间较短才十几天的js)。 那个你标注:没毛线意义的事 是在一本js书中学的,说是为了平稳退化,搞了半天自己就理解为,万一浏览器不支持这个属性,就js语句作废,不会导致js崩溃。
引用 1 楼 KK3K2005 的回复:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>各行添加样式</title>
    <style type="text/css">
        p{font:400 20px/30px "微软雅黑";background-color: red;display: inline;}
    </style>
    <script type="text/javascript">
        function addBrTag(){
            if(!document.getElementsByTagName) return false;   //这句有毛意义呢?
            var p_tag=document.getElementsByTagName("p");



            for(var i=0;i<p_tag.length;i++){
                var create_br=document.createElement("br");        //根据你的业务逻辑 你是每个p加一个br
                p_tag[i].parentNode.insertBefore(create_br,p_tag[i]);

                alert(i);

            }

        }
    </script>


</head>
<body>
<div id="demo"></div>
<p>1.我是个好人。</p>
<p>2.卧槽这你也信。</p>
<p>3.你这么还不是好人。</p>
<p >4.我做了什么事好人。</p>
<p>5.比我还穷,居然信我把钱都给我,还不是好人。</p>
<p>6.这只能说你骗术很高我被骗了。</p>
<p>7.不是,不是这个原因,是你快饿死了。</p>
<p>8.表示不懂?请解释。</p>
<p>9.老实和好人都不会活得很长,死的快。</p>
<p>10.你错了,老实人和好人是因为最笨迂腐而饿死的。</p>
<p>11.那你属于哪一种。</p>
<p>12.我哪一种都不是,我是脑子反应慢。</p>
<p>13.那你岂不是快要饿死了。</p>
<p>14.是的,快要饿死了。</p>

</body>
<script>
    addBrTag();
</script>
</html>

谢谢你的回答,修改了一下,解决了,可否告知一下为什么
引用 1 楼 KK3K2005 的回复:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>各行添加样式</title>
    <style type="text/css">
        p{font:400 20px/30px "微软雅黑";background-color: red;display: inline;}
    </style>
    <script type="text/javascript">
        function addBrTag(){
            if(!document.getElementsByTagName) return false;   //这句有毛意义呢?
            var p_tag=document.getElementsByTagName("p");



            for(var i=0;i<p_tag.length;i++){
                var create_br=document.createElement("br");        //根据你的业务逻辑 你是每个p加一个br
                p_tag[i].parentNode.insertBefore(create_br,p_tag[i]);

                alert(i);

            }

        }
    </script>


</head>
<body>
<div id="demo"></div>
<p>1.我是个好人。</p>
<p>2.卧槽这你也信。</p>
<p>3.你这么还不是好人。</p>
<p >4.我做了什么事好人。</p>
<p>5.比我还穷,居然信我把钱都给我,还不是好人。</p>
<p>6.这只能说你骗术很高我被骗了。</p>
<p>7.不是,不是这个原因,是你快饿死了。</p>
<p>8.表示不懂?请解释。</p>
<p>9.老实和好人都不会活得很长,死的快。</p>
<p>10.你错了,老实人和好人是因为最笨迂腐而饿死的。</p>
<p>11.那你属于哪一种。</p>
<p>12.我哪一种都不是,我是脑子反应慢。</p>
<p>13.那你岂不是快要饿死了。</p>
<p>14.是的,快要饿死了。</p>

</body>
<script>
    addBrTag();
</script>
</html>

似梦飞花 2016-10-13
  • 打赏
  • 举报
回复
闭包问题 写在立即执行的函数里 如果只支持高版本浏览器的话 把for里的var改成let就可以了
KK3K2005 2016-10-13
  • 打赏
  • 举报
回复

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>各行添加样式</title>
    <style type="text/css">
        p{font:400 20px/30px "微软雅黑";background-color: red;display: inline;}
    </style>
    <script type="text/javascript">
        function addBrTag(){
            if(!document.getElementsByTagName) return false;   //这句有毛意义呢?
            var p_tag=document.getElementsByTagName("p");



            for(var i=0;i<p_tag.length;i++){
                var create_br=document.createElement("br");        //根据你的业务逻辑 你是每个p加一个br
                p_tag[i].parentNode.insertBefore(create_br,p_tag[i]);

                alert(i);

            }

        }
    </script>


</head>
<body>
<div id="demo"></div>
<p>1.我是个好人。</p>
<p>2.卧槽这你也信。</p>
<p>3.你这么还不是好人。</p>
<p >4.我做了什么事好人。</p>
<p>5.比我还穷,居然信我把钱都给我,还不是好人。</p>
<p>6.这只能说你骗术很高我被骗了。</p>
<p>7.不是,不是这个原因,是你快饿死了。</p>
<p>8.表示不懂?请解释。</p>
<p>9.老实和好人都不会活得很长,死的快。</p>
<p>10.你错了,老实人和好人是因为最笨迂腐而饿死的。</p>
<p>11.那你属于哪一种。</p>
<p>12.我哪一种都不是,我是脑子反应慢。</p>
<p>13.那你岂不是快要饿死了。</p>
<p>14.是的,快要饿死了。</p>

</body>
<script>
    addBrTag();
</script>
</html>

qp19890805 2016-10-13
  • 打赏
  • 举报
回复
这个问题是由于你只创建了一个br标签啊,你加了断点跟踪就能看出来,你的for循环是把这个br一次一次的不停的移动了。

87,919

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧