我可能丢失/做一些愚蠢的,但我似乎不能工作了这一点:奇怪的JavaScript循环行为的Jquery追加
这里的显示问题小提琴: https://jsfiddle.net/jhqjmcn4/1/
请注意,您需要打开控制台才能看到发生了什么。
基本上,在这个例子中,我有两个函数包含一个for循环,除了第二个包含JQuery附加外,它们是相同的。
该函数的目标是从一个字符串中获取html元素,该元素在第一个函数中工作正常,但不是第二个。
从控制台中可以看出,这会导致任何不是文本节点的内容被忽略,也不会被添加到列表中。在这种情况下,b和p标签不包含在内。
这里再次代码:
JS:
function parse_text(text) {
var div = document.createElement("DIV");
div.innerHTML = text;
var elements = div.childNodes;
var container = jQuery("#container");
var list = [];
for (var i = 0; i < elements.length; i++){
var element = elements[i];
list.push(element);
console.log("First", list);
}
}
function parse_text_two(text) {
var div = document.createElement("DIV");
div.innerHTML = text;
var elements = div.childNodes;
var container = jQuery("#container2");
var list = [];
for (var p = 0; p < elements.length; p++){
var element = elements[p];
list.push(element);
console.log("Second", list);
container.append(element);
}
}
var text = "Here is <b>some</b> text with <p>html</p> in it";
parse_text(text);
parse_text_two(text);
HTML(无关):
<div id="container">
</div>
<div id="container2">
</div>
在此先感谢。
目的是什么? – Satpal
这两种方法都正常工作......您面临的问题是什么? – Samir
问题出在第二个函数中,当应用程序运行时,element.length包含5,但是对于每次迭代,这个长度会发生变化,并且element.length将变为3.这是因为container.append函数 –