javascript在数组for循环打印document.write适用于数组而不是document.getElemntById?

时间:2016-06-15 13:40:13

标签: javascript

在下面的代码中,为什么document.write适用于数组而不是document.getElemntById?

   UPDATE table1 AS p 
   INNER JOIN table1 AS Dad
      ON p.dad_id = dad.id AND p.mom_id = mom.id
         IF color = blue
SET p.color = blue
     .....?

3 个答案:

答案 0 :(得分:1)

检查范围

考虑将<script>标记放在代码的末尾(就在</body>元素之前或至少在<div>之后的某个位置),以确保它可以看到元素需要定位:

<div id="txt"></div>
<script>
    // Your code here
</script>

这将确保您的document.getElementById()功能可以&#34;查看&#34;您要定位的元素,并在需要时相应地访问它。

连接您的值

虽然您绝对可以将循环中的=更改为+=,以便不断连接到您的内容:

document.getElementById("txt").innerHTML + = arr[i];

4castle在他的评论中提到的更好的方法是在循环中构建一个字符串,然后在最后一次迭代后设置它,以避免实际附加到innerHTML属性的问题,这可能导致一些unexpected DOM issues

var arr = new Array("pro","pro1","pro2");
var content = '';
for(var i =0 ;i<arr.length;i++){
      // Build your content
      content += arr[i];
}
// Now set it
document.getElementById("txt").innerHTML = content;

避免使用Array.join()

进行循环播放

更好的方法仍然是完全避免循环并使用Array.join()函数连接并设置文本而不循环:

var arr = new Array("pro","pro1","pro2");
document.getElementById("txt").innerHTML = arr.join('');

示例

enter image description here

&#13;
&#13;
<pre>Setting with Content</pre>
<div id="txt"></div>
<pre>Setting via Array.join()</pre>
<div id="txt2"></div>
<pre>document.write()</pre>
<script>
  var arr = new Array("pro", "pro1", "pro2");
  var content = '';
  for (var i = 0; i < arr.length; i++) {
    content += arr[i];
    document.write(arr[i]);
  }
  document.getElementById('txt').innerHTML = content;
  document.getElementById('txt2').innerHTML = arr.join('');
</script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

它实际上工作正常,但是你一遍又一遍地覆盖你的innerHTML直到数组结束。

使用

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id = "txt">
</div>


<script>
var arr = new Array("pro","pro1","pro2");
var output='';
for(var i =0 ;i<arr.length;i++)
{
    output+= arr[i];
}
document.getElementById("txt").innerHTML=output;
</script>
</body>
</html>

让您的代码以最小的更改工作。

也就是说,这不是高性能 - 因为DOM比Javascript慢,并且您希望尽可能少地进行DOM操作以获得最佳渲染体验。在这种特定情况下不是问题,但是如果您正在为具有100个元素的实时应用程序执行此操作,则页面将爬行。

最好的整体方法是

directory_map();

但是你会遇到全局范围变量的问题。要解决这个问题,这个特定问题的真正好答案是使用IIFE(立即调用函数表达式)。但是这个问题超出范围。我们可以继续讨论优化和最佳实践,但我会停在这里。

答案 2 :(得分:0)

在您的代码中,您通过内联javascript中的id引用元素。相反,你应该编写一个单独的javascript函数,并在某些事件上调用它。下面是您可以在body onload事件上调用的示例函数。

$servers = "splunk"  
     {  
        $status = (get-process -Name<String[running]> ).Status  
        if ($status -eq "Running") {  
            "running!"  
        } else {  
            "down"  
        }