Javascript .append()方法只追加一半的项 var sitename=”http://127.0.0.1:8000/"; var ajaxhot=document.getElementById(“hotajax”); var ajaxpopular=document.getElementById(“popularjax”); var ajaxtoday=document.getElementById(“todayajax”); var ajaxcurrent=document.getElementById(“部分索引”); var ajaxindex=document.getElementById(“ajax索引”); 函数索引jaxfunc(ajaxbutton,getfrom){ ajaxbutton.addEventListener(“单击”),函数(){ var getnew=newXMLHttpRequest(); var parser=新的DOMParser(); 打开(“GET”,sitename+getfrom); getnew.onload=函数(){ var newtitlespagestring=getnew.responseText; var newtitlespage=parser.parseFromString(newtitlespagestring,“text/html”); var newtitles=newtitlespage.getElementById(“内容体”).children[1]; ajaxcurrent.children[0]。children[0]。innerHTML=newtitlespage.getElementById(“内容正文”)。children[0]。innerHTML; while(ajaxindex.hasChildNodes()){ ajaxindex.removeChild(ajaxindex.lastChild) } console.log(newtitles.childElementCount); for(i=0;i While语句删除所有子项
--->Console记录新的标题计数,该计数为25(热门和今日)或4(热门) --->然后,下一个语句应该将所有标题附加到ajaxindex,但它只附加其中的一半,25个标题中的13个或4个标题中的2个 如果我稍微修改一下代码并将其更改为Javascript .append()方法只追加一半的项 var sitename=”http://127.0.0.1:8000/"; var ajaxhot=document.getElementById(“hotajax”); var ajaxpopular=document.getElementById(“popularjax”); var ajaxtoday=document.getElementById(“todayajax”); var ajaxcurrent=document.getElementById(“部分索引”); var ajaxindex=document.getElementById(“ajax索引”); 函数索引jaxfunc(ajaxbutton,getfrom){ ajaxbutton.addEventListener(“单击”),函数(){ var getnew=newXMLHttpRequest(); var parser=新的DOMParser(); 打开(“GET”,sitename+getfrom); getnew.onload=函数(){ var newtitlespagestring=getnew.responseText; var newtitlespage=parser.parseFromString(newtitlespagestring,“text/html”); var newtitles=newtitlespage.getElementById(“内容体”).children[1]; ajaxcurrent.children[0]。children[0]。innerHTML=newtitlespage.getElementById(“内容正文”)。children[0]。innerHTML; while(ajaxindex.hasChildNodes()){ ajaxindex.removeChild(ajaxindex.lastChild) } console.log(newtitles.childElementCount); for(i=0;i While语句删除所有子项,javascript,ajax,Javascript,Ajax,--->Console记录新的标题计数,该计数为25(热门和今日)或4(热门) --->然后,下一个语句应该将所有标题附加到ajaxindex,但它只附加其中的一半,25个标题中的13个或4个标题中的2个 如果我稍微修改一下代码并将其更改为 var sitename = "http://127.0.0.1:8000/"; var ajaxhot = document.getElementById("hotajax"); var ajaxpopular = document.getElementB
var sitename = "http://127.0.0.1:8000/";
var ajaxhot = document.getElementById("hotajax");
var ajaxpopular = document.getElementById("popularajax");
var ajaxtoday = document.getElementById("todayajax");
var ajaxcurrent = document.getElementById("partial-index");
var ajaxindex = document.getElementById("ajax-index");
function indexajaxfunc(ajaxbutton, getfrom) {
ajaxbutton.addEventListener("click", function () {
var getnew = new XMLHttpRequest();
var parser = new DOMParser();
getnew.open("GET", sitename + getfrom);
getnew.onload = function () {
var newtitlespagestring = getnew.responseText;
var newtitlespage = parser.parseFromString(newtitlespagestring, "text/html");
var newtitles = newtitlespage.getElementById("content-body").children[1];
ajaxcurrent.children[0].children[0].innerHTML = newtitlespage.getElementById("content-body").children[0].innerHTML;
while (ajaxindex.hasChildNodes()) {
ajaxindex.removeChild(ajaxindex.lastChild)
}
console.log(newtitles.childElementCount);
for(i=0; i<newtitles.childElementCount; i++) {
ajaxindex.append(newtitles.children[i])
}
};
getnew.send();
});
}
indexajaxfunc(ajaxhot, "titles/hot/");
indexajaxfunc(ajaxpopular, "titles/popular/");
indexajaxfunc(ajaxtoday, "titles/today/");
for(i=0;i一个DOM节点不能同时位于两个DOM树中。当您在循环中调用.append()
时,它会将节点附加到指定的父节点,并将其从当前父节点中移除。因此,每次递增i
时,您都会跳过下一个节点
还注意到<代码> .AppEnter()/代码>是在所有浏览器中未实现的实验特性。请考虑使用<代码> .AppDebug()/<代码>。
有几种方法可以解决此问题;一种简单的方法是将for
循环更改为:
for(i=0; i<newtitles.childElementCount; i++) {
console.log(newtitles.children[i]);
ajaxindex.append(newtitles.children[i]
}
同样值得注意的是,您在for
循环中缺少了var
或let
。这当然不是上面while
循环的问题。一个DOM节点不能同时位于两个DOM树中。当您调用.append()时
在循环中,它会将节点附加到指定的父节点,并将其从当前父节点中删除。因此,每次递增i
时,都会跳过下一个节点
还注意到<代码> .AppEnter()/代码>是在所有浏览器中未实现的实验特性。请考虑使用<代码> .AppDebug()/<代码>。
有几种方法可以解决此问题;一种简单的方法是将for
循环更改为:
for(i=0; i<newtitles.childElementCount; i++) {
console.log(newtitles.children[i]);
ajaxindex.append(newtitles.children[i]
}
同样值得注意的是,您在for
循环中缺少了var
或let
。当然,上面的while
循环没有问题。出于好奇,我从for循环中删除了I++并且for和while版本都运行得很好。这是一个非常有洞察力的实验;做得不错。R移动i++
将for
循环转换为与我发布的循环等价。newtitles.firstChild
和newtitles.children[0]
都是一样的,循环的每次迭代都会从newtitles
中删除该元素。事实上,如果您检查我答案的修订历史,我首先使用newtitles.children[0]编写它
然后将其更改为newtitles.firstChild
以简单起见。出于好奇,我从for循环中删除了I++并且for和while版本都工作得很好。这是一个非常有洞察力的实验;做得很好。删除I++
将for
循环转换为等价于while
循环I posted.newtitles.firstChild
和newtitles.children[0]
是一回事,循环的每次迭代都会从newtitles
中删除该元素。事实上,如果您检查我答案的修订历史,我首先使用newtitles.children[0]编写了它
然后将其更改为newtitles.firstChild
为简单起见。它有25个(和25个),你能告诉我丢失了哪个吗?在最后一段代码中。哦,那是我在写的,谢谢你它有25个(和25个),你能告诉我是哪个吗)丢失了吗?在最后一段代码中。哦,那是我在飞行中写的,谢谢
while( newtitles.firstChild ) {
console.log( newtitles.firstChild );
ajaxindex.appendChild( newtitles.firstChild );
}