请帮我解决这个简单的脚本

时间:2011-10-03 14:14:30

标签: javascript for-loop getelementsbytagname

我是JavaScript的新手,想要对我的简单脚本寻求帮助。

我要做的是在(for)循环的帮助下检索并显示无序列表中所有列表项元素的值。我能够让脚本逐一显示警报窗口中的所有列表项。但问题是我需要以表格方式显示的所有列表元素的值。像这样:

周一
周二
周三
.......

以下是我在剧本中的内容:

<script language="JavaScript">
<!--
    function process() {
        a = document.getElementsByTagName('li')

        for (i = 0; i < a.length; i++) {
            alert(a[i].childNodes[0].nodeValue);
        }
    }
//-->
</script>

这是HTML代码:

<body>
    <ul>
        <li>Monday</li>
        <li>Tuesday</li>
        <li>Wednesday</li>
    </ul>

    <input type="button" value="Submit" onclick="process()" />
</body>

如果可以,那么任何人都可以在我的剧本中解释我的错误吗?为什么所有3个列表项值都不能一次显示在警报窗口中?

非常感谢!

6 个答案:

答案 0 :(得分:1)

首先,创建一个字符串变量:var all_at_once = ""。然后,添加nodeValue的内容。最后,提醒这个变量:

function process(){
    var a = document.getElementsByTagName('li')
    var all_at_once = "";
    for(i=0;i<a.length;i++){
        all_at_once += a[i].childNodes[0].nodeValue + " ";
    }
    alert(all_at_once);
}

答案 1 :(得分:1)

alert反复显示,因为这是for循环所做的...它循环!循环将迭代getElementsByTagName返回的元素数组,为该数组中的每个元素执行一次循环体。

如果你想显示一个警告,一个选项是建立一个包含相应文本的字符串,然后alert

var yourString = "";
for(i=0;i<a.length;i++){
    yourString += a[i].childNodes[0].nodeValue;
}
alert(yourString);

关于您的代码的其他一些注释......您应该几乎总是使用var关键字声明变量,以防止它们泄漏到全局范围。你也应该总是用冒号结尾:

function process(){
    var a = document.getElementsByTagName('li'),
        yourString = "";
    for(i=0;i<a.length;i++){
        yourString += a[i].childNodes[0].nodeValue;
    }
    alert(yourString);
}

答案 2 :(得分:0)

<script language="JavaScript">
<!--

    function process(){
        var data = '';
        a=document.getElementsByTagName('li')

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

                    data = data  + '\n' +(a[i].childNodes[0].nodeValue);
            }
         alert(data);
    }


//-->
</script>

如果您需要弹出一个包含所有文本的内容,则只需要调用一次警报。

答案 3 :(得分:0)

function process()
{
  var a = getElementsByTagName('li'),
      text = '';

  for( i = 0; i < a.length; i++ )
  {
    text += a[i].childNodes[0].nodeValue + '\n';
  }

  alert( text );
}

答案 4 :(得分:0)

您可以通过先将数据存储在数组中然后迭代来以任何您喜欢的方式处理这些日子:

var days = new Array();
var a = document.getElementsByTagName('li')
for(var i = 0; i < a.length; i++) {
    days.push(a[i].childNodes[0].nodeValue);
}

for (i=0; i < days.length; i++) {
    // process the day
}

有关工作示例,请参阅:http://jsfiddle.net/jkeyes/Cfg4k/

答案 5 :(得分:0)

对您的功能进行这些调整应该会产生您想要的结果。祝好运! 改变了什么:1)设置一个空字符串var 2)而不是警告每个值,只需将它们附加到您之前创建的字符串var中3)最后,警告新创建的(连接的)字符串!

function process() {
    a = document.getElementsByTagName('li');
    var days = new String("");

    for (i = 0; i < a.length; i++) {
        days = days+(a[i].childNodes[0].nodeValue)+"\n";
    }
    alert(days);
}

现在我看到自打开这个帖子以来已经有很多答案......但也许所有不同的解决方案都会以不同的方式帮助你。