2012-03-24 46 views
-1

JAVASCRIPT問題不是JQUERYAJAX的JavaScript的HTML響應的insertBefore功能

with(req = new XMLHttpRequest())open("GET",url,true),onreadystatechange=function(){ 
    if (req.readyState==4 && req.status==200){ 
     proposalTable.insertBefore(req.responseText,proposalTable.lastChild.previousSibling); 
    } 
},send(null); 

req.responseText是

<tr><td>Row1</td></tr> 
<tr><td>Row2</td></tr> 
<tr><td>Row3</td></tr> 

我想表(#proposalTable)的最後行之前插入此responseText的
我的代碼不工作,因爲.insertBefore函數的第一個參數應該是我認爲的一個元素

+0

那麼響應文本是什麼樣的?你爲什麼通過'eval()'傳遞它? – Pointy 2012-03-24 13:19:45

+0

好吧,我已經修改了我的問題,現在我認爲它解釋得很好。謝謝 – user794624 2012-03-24 13:23:23

+2

目前還不清楚爲什麼你將這個響應文本傳遞給父窗口中的'eval()'(和'eval()',出於某種原因)。它是HTML,而不是JavaScript。這隻會導致錯誤(您應該在錯誤控制檯中看到)。 – Pointy 2012-03-24 14:08:57

回答

0

我將使用jQuery插入行,是這樣的:

with(req = new XMLHttpRequest())open("GET","ajax.php? page=proposal&contractid="+x,true),onreadystatechange=function(){ 
    if (req.readyState==4 && req.status==200){ 
    var $my_table = $('#my_table_id > tbody'); // we actually insert into the tBody 
    var $last_row = $my_table.find('> tr:last'); 
    var $new_rows = $(req.responseText); 
    $new_rows.appendTo($my_table); 
    $last_row.appendTo($my_table); 
    } 
},send(null); 

這基本上都會把工作做好,我還沒有測試此代碼,但是這是基本的想法

+1

我希望javascript代碼不是jQuery代碼 – user794624 2012-03-24 13:54:58

+0

您可以隨時解析響應字符串並將其拆分爲TR並插入FOR/WHILE等元素的循環 – 2012-03-24 14:44:10

+0

是的,你是對的,但它不是完美的解決方案。它可以做得更好,因爲jquery也處理它如何。 – user794624 2012-03-24 17:55:55

0

它可以是使用insertRow()函數。 這是一個例子:

<table id="proposalTable"> 
<tr><td>Row1</td></tr> 
<tr><td>Row2</td></tr> 
<tr><td>Row3</td></tr> 
</table> 
<script> 
var eltd = document.createElement('td'); 
eltd.innerHTML = 'New row'; 
var eltable = document.getElementById('proposalTable'); 
var elrows = eltable.getElementsByTagName('tr'); 
var nrrows = elrows.length - 1; 
eltable.insertRow(nrrows); 
eltable.rows[nrrows].appendChild(eltd); 
</script> 
+0

你的答案是讚賞,但我需要插入一些TR和TR已經是innerHTML的一部分......問題是需要插入HTML而不是在第二行的元素。 – user794624 2012-03-24 17:59:43