0

我是 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 个列表项值不能同时显示在警报窗口中?

非常感谢!

4

6 回答 6

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);
}
于 2011-10-03T14:19:40.770 回答
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);
}
于 2011-10-03T14:20:17.323 回答
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);
}

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

于 2011-10-03T14:38:36.613 回答
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/ 。

于 2011-10-03T14:31:35.773 回答
0
function process()
{
  var a = getElementsByTagName('li'),
      text = '';

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

  alert( text );
}
于 2011-10-03T14:21:21.997 回答
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>

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

于 2011-10-03T14:20:05.810 回答