如何让我的JavaScript正确平铺此表?

问题描述 投票:1回答:2
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);
}

以下是我和我的朋友目前用于向我们的在制品社交网站上的新状态更新添加新状态更新的JavaScript代码,问题是当新元素添加到表中时,它们会平铺在旁边,而不是向下倾斜,所以我需要知道为什么会发生这种情况以及如何解决它,任何想法?有关详细信息,请查看网站,您可能需要创建一个帐户,但在我们再次开始使用电子邮件激活之前,请随时使用虚假电子邮件。 http://friendgrid.com/以下是该问题的屏幕截图供进一步参考:http://dl.dropbox.com/u/2281426/Newsfeed%20Error.bmp

javascript auto-update tile news-feed
2个回答
0
投票

问题出在了While内部:

newfeedstable.insertBefore(newcontent.firstChild, newfeedstable.firstChild);

那里的第一个参数应该只是没有newcontent.firstChild,firstChild只插入那个元素而不是新创建的<TR>

虽然我建议你使用DOM方法来修改表格,但更容易:

TableElement.insertRow( 0).innerHTML = oRequest.responseText;

你的案例中的TableElement将是newfeedstable,如果你以后不需要它,你可以减少到:

document.getElementById("newfeeditems").insertRow( 0).innerHTML = oRequest.responseText;

0作为参数将使插入始终作为第一行,使用-1始终作为最后一行插入。


0
投票

试试下一个:

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.
       }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.