2011-07-29 27 views
2

HTML:如何從jQuery.load()響應獲取body元素?

<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <div class="mainContainer"> dgdhgdhgd 
      <div class="header"></div> 
      <div class="navigation"></div> 
      <div class="content"></div> 
      <div class="footer"></div> 
     </div> 
    </body> 
</html> 

的jQuery:

<script type="text/javascript"> 

     $(function() { 
      alert("hsahdjkha"); 
      $('#form1').append('<span id="result" ></span>'); 

      $('#result').load('sageframetemplating/layout.html', function() { 
       alert('Load was performed.'); 
       $('#result').find('body').html(); 
       alert($('#result').html()); 
       test(); 
      }); 

     }); 

     function test() { 
      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/Result", 
       data: "{ result:'" + $('#result').html() + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(response) { 
        alert("Wa hooooooooo"); 
       }, 
       error: function() { 
        alert("error"); 
       } 
      }); 
     } 

    </script> 

我想趕上HTML的只有身體的一部分,但我得到:

<title></title> 
<div class="mainContainer"> dgdhgdhgd 
    <div class="header"></div> 
    <div class="navigation"></div> 
    <div class="content"></div> 
    <div class="footer"></div> 
</div> 

如何能夠搭上只有身體的一部分?

+0

你的代碼甚至沒有結果或form1的ID –

+0

@keith nop只是我得到了上面的html頁面,並試圖僅檢索正文部分 –

+0

爲什麼不提供html部分,而不是完整的html結構,在'sageframetemplating/layout中。 HTML' – toopay

回答

2

問題是,您正嘗試在頁面中插入一個包含<body><head>標記的HTML塊。

由於在頁面內不能有多個<body>標籤,因此它們會被剝離出來,並留下您看到的輸出。

一種可能的解決方案是使用$.get(),而不是將數據直接轉儲到頁面中,並在將數據放入頁面之前解析數據。

$.get('sageframetemplating/layout.html', function(data) { 
    var parsedData = $(data).find("body").html(); 
    $("#result").html(parsedData); 
}); 

我承認我在沒有任何測試的情況下寫了這個,所以你可能不得不自己清理語法。

編輯

html() docs

這種方法不適用於XML文檔。

太棒了。

data對象實際上是一個Document對象,它有一個方法getElementsByTagName(),使我們能夠破解與它周圍拿到手一NodeList。如果我們然後在列表中訪問的第一個項目,我們得到了一個Node

var node = data.getElementsByTagName("body")[0] 

在這一點上,我們可以提取的結果:

$("#result").append($(node).children()) 

這骯髒,骯髒的黑客會得到你想要的東西對於這個非常具體的情況。

如果您的頁面包含腳本,請注意可怕的事情。

+0

即時獲取parseddata null但數據即將..i thnk $(數據)不工作....任何其他的想法?? –

+0

@Shree好的,我們可以嘗試調試它。檢查您的變量是否有正確的框和拼寫:例如parsedData:2天,一個資本。放入一個alert(data);'在那裏:你得到一個文檔對象嗎? – Henry

+0

@亨利不僅文件對象我有整個HTML。警報(數據);工作正常,但問題是數據不是對象多數民衆贊成爲什麼$(數據).find(「身體」)。html(); 給null .. –