2009-10-26 51 views
4

我试图创建一个将最新帖子插入div的帖子按钮,而不清除里面的所有内容。我现在的代码插入了新的分隔符,但清除了它里面的所有内容,所以最后只是最后一个文章。将内容插入到innerHTML中而不清除里面已经有的内容

有谁知道如何解决它?

感谢

的代码是:

var xmlHttp 

function submitNews() { 
    xmlHttp=GetXmlHttpObject(); 

    if (xmlHttp==null) { 
    alert ("Your browser does not support XMLHTTP!"); 
    return; 
    } 

    var content = document.getElementById('newsfeed_box').value; 
    var uid = document.getElementById('pu_uid').innerHTML; 

    var url="ajax/submit_post.php"; 
    url=url+"?post="+content+"&id="+uid; 
    url=url+"&validate="+Math.random(); 

    xmlHttp.onreadystatechange=stateChange; 

    xmlHttp.open("GET",url,true); 
    xmlHttp.send(null); 
} 

function stateChange() { 
    switch(xmlHttp.readyState) { 
    case 1: 
     document.getElementById('successs').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('successs').style.display = "block"; 
     break; 
    case 2: 
     document.getElementById('successs').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('successs').style.display = "block"; 
     break; 
    case 3: 
     document.getElementById('successs').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('successs').style.display = "block"; 
     break; 
    case 4: 
     var newdiv = document.createElement('div'); 
     newdiv.innerHTML = xmlHttp.responseText; 
     document.getElementById('successs').appendChild(newdiv); 
     break; 
    } 
} 

// creating the XMLHttpRequest 
function GetXmlHttpObject() { 
    if (window.XMLHttpRequest) { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    return new XMLHttpRequest(); 
    } 
    if (window.ActiveXObject) { 
    // code for IE6, IE5 
    return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    return null; 
} 
+1

你意识到你有一个“插入新的分水岭”的代码只是1 4'之开关的情况下?而这些3 *其他案例实际上清除了div? – 2009-10-26 19:25:52

+0

除非你特意试图避免它,否则我会推荐使用像jQuery这样的框架来帮助解决这个ajax voodoo问题。从长远来看,这会让你的生活更加轻松。 – jckeyes 2009-10-26 19:42:06

回答

5

的问题是在你的switch语句。处理1 - 3的情况会完全重置元素的innerHTML。你可能无法看到它,但这些案件正在受到打击。尝试将你的加载图片移动到不同的容器中,它会开始工作。

switch(xmlHttp.readyState) { 
    case 1: 
     document.getElementById('status').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('status').style.display = "block"; 
     break; 
    case 2: 
     document.getElementById('status').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('status').style.display = "block"; 
     break; 
    case 3: 
     document.getElementById('status').innerHTML = "<img src=\"style/images/loader.gif\" />"; 
     document.getElementById('status').style.display = "block"; 
     break; 
    case 4: 
     var newdiv = document.createElement('div'); 
     newdiv.innerHTML = xmlHttp.responseText; 
     document.getElementById('successs').appendChild(newdiv); 
     break; 
    } 
2
  1. 内部HTML复制到一个变量
  2. 混合新的内容和变量你需要的方式(新+旧的或旧+新)
  3. 设置内部html =你的混合东西
1

我相信这将这样的伎俩:

whatever.innerHTML += additionalInfo; 
+0

我试过了。它仍然会清除里面的内容,然后添加新的内容。 – Stephen 2009-10-26 19:17:14

+0

我刚刚在IE6,7,8,FF3,Chrome3上测试过它,它工作正常 – wambotron 2009-10-26 19:21:19

-1
var currentContent = document.getElementById('status').innerHTML; 

document.getElementById('status').innerHTML = currentContent+"new stuff"; 
+0

请给你的答案添加一些上下文。只是代码的答案可能会被删除。 – bennygenel 2017-09-23 13:38:39