如何让JavaScript正确平铺此表?
这是我和我的朋友目前正在使用的JavaScript代码,用于向表中添加新的状态更新,以便在我们的在线社交网站上进行新的状态更新,问题是当新元素添加到表中时,它们会向一侧平铺,而不是向下平铺,所以我需要知道为什么会发生这种情况以及如何修复它,有什么想法吗?有关更多信息,请查看网站,您可能需要创建帐户,但在我们再次开始使用电子邮件激活之前,您可以随意使用假电子邮件。 以下是该问题的屏幕截图供进一步参考:请尝试下一步:如何让JavaScript正确平铺此表?,javascript,auto-update,tile,feed,Javascript,Auto Update,Tile,Feed,这是我和我的朋友目前正在使用的JavaScript代码,用于向表中添加新的状态更新,以便在我们的在线社交网站上进行新的状态更新,问题是当新元素添加到表中时,它们会向一侧平铺,而不是向下平铺,所以我需要知道为什么会发生这种情况以及如何修复它,有什么想法吗?有关更多信息,请查看网站,您可能需要创建帐户,但在我们再次开始使用电子邮件激活之前,您可以随意使用假电子邮件。 以下是该问题的屏幕截图供进一步参考:请尝试下一步: var intervalID; function autoUpdateFeed()
var intervalID;
function autoUpdateFeed()
{
if( document.autoupdatefeedform.autoupdatefeed.checked == true )
{
intervalID = setInterval(updateFeed, 1000);
} else {
clearInterval(intervalID);
}
}
function updateFeed()
{
var oRequest;
try {
oRequest=new XMLHttpRequest();
} catch (e) {
try {
oRequest=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
oRequest=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
oRequest.onreadystatechange=function()
{
if(oRequest.readyState==4)
{
//Start of problem.
var newfeedstable = document.getElementById("newfeeditems");
var newcontent = document.createElement('tr');
newcontent.innerHTML = oRequest.responseText;
while (newcontent.firstChild)
{
newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);
}
//End of problem.
}
}
oRequest.open("GET","back/newsfeedlatest.php",true);
oRequest.send(null);
}
oRequest.onreadystatechange=function(){
if(oRequest.readyState==4){
如果(oRequest.status==200){//HTTP确定
//问题的开始。
var newfeedstable=document.getElementById(“newfeeditems”);
var newcontent=document.createElement('tr');
newcontent.innerHTML=oRequest.responseText;
//删除下一行:这是一个问题:您下载了一个,下一个代码直接将其插入到表中,而无需
//while(newcontent.firstChild)
//{
//newfeedstable.insertBefore(newcontent.firstChild,newfeedstable.firstChild);
//}
//1)添加下一行,请尝试下一步:
newfeedstable.insertBefore(newcontent,newfeedstable.firstChild)
//2)或者如果响应可以包含多个try next(未选中代码)
while(newcontent.cells.length){
var td=newcontent.cells[0];
newcontent.removeChild(td);
var tr=document.createElement('tr');
tr.appendChild(td);
newfeedstable.insertBefore(tr,newfeedstable.firstChild);
}
//问题结束了。
}
}
}
问题将出现在While中的行:
oRequest.onreadystatechange=function() {
if(oRequest.readyState===4) {
if(oRequest.status===200) { // HTTP OK
//Start of problem.
var newfeedstable = document.getElementById("newfeeditems");
var newcontent = document.createElement('tr');
newcontent.innerHTML = oRequest.responseText;
// next lines removed: it's a problem: you download a <td> and next code insert its into table directly, without <tr>
//while (newcontent.firstChild)
//{
// newfeedstable.insertBefore(newcontent.firstChild,newfeedstable.firstChild);
//}
// 1) next line added, try next:
newfeedstable.insertBefore(newcontent,newfeedstable.firstChild)
// 2) OR IF RESPONSE CAN CONTAIN MORE THAN ONE <TD> try next (not checked code)
while (newcontent.cells.length) {
var td=newcontent.cells[0];
newcontent.removeChild(td);
var tr=document.createElement('tr');
tr.appendChild(td);
newfeedstable.insertBefore(tr,newfeedstable.firstChild);
}
//End of problem.
}
}
}
第一个参数应该只有newcontent
,没有。firstChild
,firstChild将只插入该元素,而不是新创建的
尽管我建议您使用DOM方法来修改表,但更简单的方法是:
newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);
您案例中的TableElement将是newfeedstable,如果以后不需要它,您可以将其缩减为:
TableElement.insertRow( 0).innerHTML = oRequest.responseText;
0 as参数将使插入始终作为第一行,使用-1将插入始终作为最后一行。请显示从newsfeedlatest.php返回的文本(HTML)。另外,问题代码中while循环的目的是什么?在这一点上(而不是循环),您不想直接在
newfeedstable
中插入新创建的TR元素newcontent
?这很有效,谢谢,我唯一需要添加的是一个if语句,用于空响应。
document.getElementById("newfeeditems").insertRow( 0).innerHTML = oRequest.responseText;