2010-09-27 5 views
4

Une réponse AJAX renvoie la page HTML complète. J'ai besoin d'extraire le fragment entre le corps (<body> et </body>) tags. Cela doit être fait du côté client en utilisant JavaScript. Toute aide serait appréciée.Comment extraire le fragment entre le corps (<body> ...</body>) balises de la réponse AJAX en JavaScript

+2

Utilisez-vous une bibliothèque javascript, ou vanilla javascript? – dekomote

+3

'xmlhttp.responseXML.body'? – galambalazs

+0

Merci à tous ceux qui ont répondu. Pour l'instant, nous avons pris l'approche de la sous-chaîne puisque nous connaissons le format exact du HTML retourné (nous le générons nous-mêmes). Je vais chercher YQL comme une technologie générale pour ce genre d'exigences. –

Répondre

0

Si votre page HTML est sur le Web, vous pouvez utiliser YQL.

par exemple, si l'URL de votre page est http://xyz.com/page.html et que vous voulez tout élément du corps font comme ça

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

Si vous êtes nouveau à YQL lire ce http://en.wikipedia.org/wiki/YQL_Page_Scraping

Il y a aussi moyen simple de le faire en utilisant Chromyqlip Extension https://chrome.google.com/extensions/detail/bkmllkjbfbeephbldeflbnpclgfbjfmn

Espérons que cela vous aidera !!!

4

La manière la plus simple, mais la moins bonne, serait un simple piratage de chaîne sur le texte de la réponse.

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

Ce n'est pas satisfaisante dans le cas général, mais il peut être possible si vous connaissez le format exact du HTML retourné (par exemple. Qu'il n'y a pas d'attributs sur le <body>, que les séquences <body> et </body> n'est pas utilisé dans un commentaire au milieu de la page, etc).

Une autre façon encore très-mal est d'écrire le document entier à la innerHTML d'un nouvellement créé <div> et poissons les éléments que vous voulez, sans se soucier que l'écriture ou <html><body> dans un <div> est cassé. Vous ne pourrez pas séparer de façon fiable les éléments enfants de <head> de ceux du <body> de cette façon, mais c'est ce que fait par exemple jQuery.

Une plus robuste mais plus douloureux chemin serait d'utiliser un document HTML distinct:

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); 

bien que ce serait aussi exécuter tous les scripts dans le document, en changeant potentiellement, de sorte que peut-être pas non plus satisfaisante.

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); 
} 

Ceci vous donne le code XML pour la balise "body", sous forme de chaîne. Malheureusement, il comprend toujours le "<corps>" et "</corps >", donc si vous voulez seulement le contenu de l'étiquette, vous devrez les enlever.

Vous pouvez jeter un oeil au deuxième exemple ("Exemple de code HTML 2") sur this page.

Questions connexes