Javascript输出缓冲区按错误的顺序放置内容
Javascript output buffer places things in the wrong order
我的常规javascript代码似乎错误地或以错误的顺序向页面输出内容,这很奇怪,因为代码非常简单(可能最多20行)。我的代码在下面。注:
pttr_data.length
将返回150clean_array.length
将返回4output
是div对象,即var output=document.getElementById("results")
我希望我的代码输出如下:
<div>matcha matchb matchc matchn </div>
但它却回来了:
<div/>matcha matchb matchc match
这是我的代码,我在其中放置了随机字符,以确定东西的去向(你会看到div周围的;;;, |||, [[[, }}}
):
var len = pttr_data.length;
for (var i = 0; i < len; i++) {
var clean_array = pttr_data[i].match(RegExp(rexp.value, flags.value));
output.innerHTML += ";;;<div>|||";
var lengthy = clean_array.length;
for (var j = 1; j < lengthy; j++) {
if( clean_array[j] ) { output.innerHTML += clean_array[j] + ' '; }
else { output.innerHTML += 'NULL '; }
}
out.innerHTML += "[[[</div>}}}'n";
}
此代码返回:
;;;<div>|||</div>matcha matchb matchc [[[}}}
有人能解释为什么会发生这种情况吗?javascript for循环是否独立运行(从而以不同的速度完成),即使它们是嵌套的?然而,这毫无意义,为什么有人会设计这样的脚本语言
我的代码如何输出<div/>blah
而不是<div>blah</div>
?
感谢
.innerHTML
属性比您可以附加到的字符串更复杂。如果您将"<div>"
附加到它(在您的示例中为";;;<div>|||"
),浏览器不会等待您是否最终提供一个关闭的</div>
标记,它只会立即创建一个div。然后添加更多文本:"matcha", "matchb", etc
。最后,您附加了一个关闭的</div>
,浏览器会忽略它,因为它没有等待它,但它保留了"[[[}}}"
。
不要在执行时追加到.innerHTML
,而是追加到一个字符串变量,然后在末尾将.innerHTML
设置为等于该字符串。
如果您想附加由空格分隔的clean_array
的所有元素,甚至不需要for
循环,您可以使用.join()
:
output.innerHTML = "<div>" + clean_array.join(" ") + "</div>";
// or for all from index 1
output.innerHTML = "<div>" + clean_array.slice(1).join(" ") + "</div>";
但要保持嵌套for循环:
var len = pttr_data.length,
outputStr = ""; // use a string variable
for (var i = 0; i < len; i++) {
var clean_array = pttr_data[i].match(RegExp(rexp.value, flags.value));
outputStr += ";;;<div>|||";
var lengthy = clean_array.length;
for (var j = 1; j < lengthy; j++) {
// I think ternary conditional is neater than if/else
outputStr += clean_array[j] ? clean_array[j] + ' ' : 'NULL ';
}
outputStr += "[[[</div>}}}'n";
}
output.innerHTML += outputStr;
相关文章:
- 以不同的顺序输出数据
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 为什么setTimeout输出不按顺序添加的数字
- 用于提示输入和输出的JavaScript按字母顺序排序
- JavaScript 循环输出顺序不正确 - 如何解决这个问题
- 如何输出反向顺序?AJAX 文件 > DIV.
- 以字母顺序输出数组
- 使用 gulp 和 main-bower-files 对输出进行排序(gulp 顺序不起作用)
- 如果我更改输入顺序,为什么控制台会给我不同的输出,如下所示
- 编译输出中的TypeScript依赖项未按正确顺序解析
- Javascript输出缓冲区按错误的顺序放置内容
- Angular验证——按页面顺序输出无效字段
- Angular 2的ngFor——使用索引的反向输出顺序
- 由JS Promises排序的AJAX调用似乎按照正确的顺序运行,但数据库的输出却表明并非如此
- 反转输出字符串的顺序
- 数组保持以随机顺序输出- Push
- 如何将不断变化的顺序输出修改为随机输出
- 在输出到屏幕之前,如何按时间顺序对多个 Twitter 时间线进行排序
- 按所需顺序从数组中输出值
- 使用jQuery sortable()重新排序元素,并在PHP中输出正确的顺序