2010-09-27 27 views
4

AJAX響應返回完整的HTML頁面。我需要提取正文(<body></body>)標籤之間的片段。這需要使用JavaScript在客戶端完成。任何幫助將不勝感激。如何從JavaScript中的AJAX響應中提取正文(<body> ...</body>)標記之間的片段

+2

你使用任何JavaScript庫,或香草JavaScript? – dekomote 2010-09-27 11:31:43

+3

'xmlhttp.responseXML.body'? – galambalazs 2010-09-27 11:45:50

+0

感謝所有回答。現在,我們採取了串的方法,因爲我們知道正在返回的HTML的確切格式(我們正在創造它自己)。我查找YQL作爲這種需求的通用技術。 – 2011-02-17 22:03:17

回答

0

如果您的HTML頁面在Web上,那麼您可以使用YQL。

例如,如果你的網頁的網址爲http://xyz.com/page.html和你想要的一切在主體元素 做這樣

select * from html where url="http://xyz.com/page.html" and xpath='//body' 

如果你是新來YQL閱讀本http://en.wikipedia.org/wiki/YQL_Page_Scraping

也有簡單的方法來做到這一點使用Chromyqlip擴展https://chrome.google.com/extensions/detail/bkmllkjbfbeephbldeflbnpclgfbjfmn

希望這會幫助你!

4

最簡單但種類最糟糕的方式是對響應文本進行簡單的字符串黑客攻擊。

var bodyhtml= html.split('<body>').pop().split('</body>')[0]; 

這是在一般情況下不盡人意,但可能是可行的,如果你知道正在返回的HTML的精確格式(例如,有是在<body>沒有屬性,該序列<body></body>不用在頁面中間的評論中,等等)。

另一個仍然相當壞的方法是編寫整個文檔到新創建的<div>撈出你想要的,不關心,寫<html><body>一個<div>內被打破元素的innerHTML。您將無法通過這種方式可靠地將<head>中的子元素與<body>中的子元素分開,但這就是例如jQuery所做的。

更健壯,但更痛苦的方法是使用一個單獨的HTML文檔:

var iframe= document.createElement('iframe'); 
iframe.style.display= 'none'; 
document.body.insertBefore(iframe, document.body.firstChild); 
var idoc= 'contentDocument' in iframe? iframe.contentDocument : iframe.contentWindow.document; 
idoc.write(htmlpage); 
idoc.close(); 
alert(idoc.body.innerHTML); 
document.body.removeChild(iframe); 

,雖然這也將執行該文件中的所有腳本,潛在地改變它,這樣可能不令人滿意無論是。

0
// Get the XML object for the "body" tag from the XMLHttpRequest/ActiveXObject 
// object (requestObj). 

// NOTE: This assumes there is only one "body" tag in your HTML document. 
var body = requestObj.responseXML.getElementsByTagName("body")[0]; 

// Get the "body" tag as an XML string. 
var bodyXML; 

// for Internet Explorer    
if (body.xml) { 
    bodyXML = body.xml; 
} 

// for every other browser 
if (typeof (XMLSerializer) != "undefined") { 
    var serializer = new XMLSerializer(); 
    bodyXML = serializer.serializeToString(body); 
} 

這可以讓你的XML的「身體」的標籤,作爲一個字符串。不幸的是,它仍然包含了「<體>」和「< /身體>」,所以如果你只想要標記的內容,你將不得不剝離這些了。

你可能想看看在this page第二個示例(「示例HTML代碼2」)。

相關問題