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
Répondre
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 !!!
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.
// 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.
- 1. html valide - '<' or '>' entre <script> balises
- 2. Ajax, le corps de la réponse est vide
- 3. Paramètre JavaScript entre <%%>
- 4. Différence entre <%: et <% =
- 5. <% $, <% @, <% =, <% # ... quel est le problème?
- 6. Insertion dynamique des balises <script> en HTML sur le chargement de la page
- 7. Différence entre <? Php et <?
- 8. En utilisant ASP <% .... %> Balises
- 9. obtenir le texte entre <tags> dans php</tags>
- 10. Expression régulière PHP pour extraire le texte entre guillemets dans le corps de la balise
- 11. PHP comment supprimer les balises HTML (<DIV></div>, <P></P>, <SPAN></SPAN>) de la chaîne
- 12. Lire le corps de réponse d'erreur Java
- 13. Constante en classe << self block
- 14. Le contenu de réponse de Java renvoie au lieu de < or > < >
- 15. Quelle est la différence entre ofstream "<<" et Write
- 16. Asp.net MVC différence entre <%: et <% =
- 17. Comment utiliser ruby pour obtenir une chaîne entre les balises HTML <cite>?
- 18. <% # balises de serveur dans jquery
- 19. Quelle est la différence entre <% %> et <%= %>?
- 20. Le moyen le plus rapide de convertir la liste <?> en Liste <ObjectType>
- 21. est la différence entre courir <script></script> et function() javascript?
- 22. Réponse HTTP 500 avec le corps?
- 23. Dans ASP.Net, quelle est la différence entre <% = et <% #
- 24. Quelle est la différence exacte entre les balises de scriptlet <% = du code%> et <# du code%>?
- 25. operator << - comment détecter le dernier argument
- 26. Comment extraire la réponse XML i php
- 27. Quelle est la différence entre $ ("<tag></tag>") et $ ("<tag>")?
- 28. corps de la réponse AJAX pour une utilisation dans le rappel d'erreur
- 29. Problème WebRequest, réponse avant le corps de la demande
- 30. $ .ajax() obtenir le corps que j'ai
Utilisez-vous une bibliothèque javascript, ou vanilla javascript? – dekomote
'xmlhttp.responseXML.body'? – galambalazs
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. –