2010-12-13 5 views
7

Je charge un html avec ajax. Je veux charger le résultat dans un objet jquery. J'ai essayé ça mais ça retourne null. Comment puis-je faire ceci? J'ai une page complète incluant doctype, éléments de tête et éléments de corps.Parse complète page html avec jquery

var test = $(result); //result contains html code 
alert(test.html()); //returns null 

Je charge les données avec cette fonction.

function ajaxLoadContent(element) { 
    $.ajax({ 
     url: "url to the page", 
     type: "GET", 
     timeout: 5000, 
     datattype: "html", 
     success: function(result) { 
     //handler 
     }, 
    }); 
    return false; 
+0

résultat est probablement juste une chaîne – hunter

+0

Pouvez-vous montrer comment vous obtenez les données dans 'result'? En outre, 'alert (result);' montre-t-il le html dans l'alerte? Le simple fait de déposer html dans une variable de ce type ne fait pas automatiquement revenir la fonction .html() au format html. votre variable de résultat peut déjà être html. – Josh

+1

Pourquoi ne pas simplement imprimer le résultat? Cela devrait être du texte. – WaiLam

Répondre

45

Il est il y a un certain temps, mais peut-être que vous êtes toujours intéressé par ce ..

La mise en œuvre interne de $(String) n'est pas en mesure de construire un objet jQuery qui contient head ou body tags. Il va simplement les ignorer et déplacer tous les éléments à l'intérieur de niveau.

Donc, si votre chaîne est par exemple

<html> 
    <head> 
    <meta ...> 
    </head> 
    <body> 
    <div id="a"/> 
    </body> 
</html> 

l'objet jQuery résultant sera un tableau de deux éléments

[<meta ...>, <div id="a" />] 

pour obtenir un body -comme objet jQuery tout coupé, mais le contenu du corps avant de le passer à jQuery:

body = '<div id="body-mock">' + html.replace(/^[\s\S]*<body.*?>|<\/body>[\s\S]*$/ig, '') + '</div>'; 
var $body = $(body); 

maintenant les choses fonctionnent comme exp ète .. par exemple

$body.find('#a') 

espoir qui aide ..

+2

Pourquoi cette réponse n'a pas été acceptée? Sauve-moi de beaucoup de maux de tête. Merci! – Xaver

+3

pourquoi ne peut pas jquery analyser la tête et le corps? – nbrustein

+0

Insta-downvote pour utiliser regex sur HTML. –

2

test est juste une chaîne html, vous pouvez donc tout simplement faire pour afficher le contenu

alert(result); 

et si vous voulez lier cela à un élément

$("#myDiv").html(result); 
+0

Je veux être en mesure d'utiliser certaines fonctionnalités jquery sur la valeur de retour. –

+1

Puisque le résultat est juste une chaîne, vous devrez probablement le placer sur la page avant de pouvoir interagir avec jQuery. – hunter

+0

Mzz que je dois le placer dans un iframe caché je suppose. Ce serait méchant. Probablement mieux de concevoir une solution prête à l'emploi. –

-1

Essayez la load méthode de l'objet jQuery: http://api.jquery.com/load/

Chargez les données à partir du serveur et placez le code HTML retourné dans l'élément correspondant .

+0

L'auteur de cette réponse pourrait être sur quelque chose. La conversion de la chaîne HTML entière en un 'data:' url et l'appel de $ .ajax() peut être la SEULE méthode fiable. –

1
function ajaxLoadContent(element) { 
$.ajax({ 
    url: "url to the page", 
    type: "GET", 
    timeout: 5000, 
    datattype: "html", 
    success: function(data) { 
    var result = $(data); 
    }, 
}); 
return false; 

Vous devriez maintenant être en mesure d'appeler le résultat comme celui-ci (rappelez-vous ce n'est pas ajouté à encore DOM):

alert(result.html()); 

Ajouter au DOM

result.appendTo("body"); 

Let Je sais si cela fonctionne pour vous.

+1

Non, ça ne marche pas car le HTML que je reçois contient des balises head, body et même un doctype. –

+0

ok changer pour: var résultat = données; $ ("html"). Html (résultat); Dites-moi si cela fonctionne? –

+0

Je dois avoir accès aux éléments de tête aussi. Ce travail est seulement pour les éléments de corps et l'élément de titre. –