2009-04-01 6 views
60

J'ai une chaîne HTML provenant d'une source chargée Ajax. Je voudrais obtenir quelques attributs d'un objet (image) dans cette chaîne, avant de mettre le HTML dans le document.parse html chaîne avec jquery

J'ai quelque chose comme:

$.ajax({ 
     url: uri+'?js', 
     success: function(data) { 
      var htmlCode = $(data).html(); 

      $('#otherObject').html(data); 
     } 
    }); 

Comment puis-je obtenir les attributs (le src par exemple) de cette chaîne HTML?

Répondre

106

Je ne suis pas sûr à 100%, mais ne

$(data) 

produire un objet jquery avec un DOM pour ces données, non connecté partout? Ou s'il est déjà analysé en tant que DOM, vous pouvez simplement aller $ ("# myImg", data), ou tout autre sélecteur qui répond à vos besoins.

EDIT
Relire votre question, il semble que votre « données » est déjà un DOM, ce qui signifie que vous pouvez simplement aller (en supposant qu'il ya seulement une img dans votre DOM, sinon vous aurez besoin d'un sélecteur plus précis)

$("img", data).attr ("src") 

si vous souhaitez accéder à l'attribut src. Si vos données sont simplement du texte, il serait probablement du travail à faire

$("img", $(data)).attr ("src") 
+2

uuh, merci pour votre réponse! c'est la solution :) je ne l'ai pas vu. je vous souhaite un bon premier avril - et maintenant je vais avoir honte;) – MarvinS

+0

mhm, je dois regretter mon commentaire. votre exemple ne fonctionne pas pour ie (testé en version 7). J'ai utilisé "$ (données)" - "données" - "$ (données) .html()" - rien ne fonctionne. Aucune suggestion? – MarvinS

+0

$ ("img", $ ('

')) travaillait en FF (n'a pas IE7). Avoir seulement la balise IMG ci-jointe, ou enfermée dans un seul corps ne fonctionnait PAS, alors peut-être que cela se traduit par une seule entité? Avez-vous essayé $ (data) .attr() directement? – falstro

2

MarvinS.-

Essayez:

$.ajax({ 
     url: uri+'?js', 
     success: function(data) { 
       var imgAttr = $("img", data).attr('src'); 
       var htmlCode = $(data).html(); 
       $('#imgSrc').html(imgAttr); 
       $('#fullHtmlOutput').html(htmlCode); 
     } 
    }); 

Cela devrait charger le bloc entier html à partir des données dans #fullHtmlOutput et la src de l'image dans #imgSrc.

1

simplement ajouter élément conteneur befor votre élément img juste pour être sûr que votre élément intersted pas le premier un, testé par exemple, ff

1

Une chose à noter - comme je l'ai eu aujourd'hui exactement ce problème, selon votre HTML jQuery peut ou peut ne pas bien l'analyser. jQuery n'analyserait pas mon HTML en un DOM correct - sur de petits fichiers compatibles XML cela fonctionnait bien, mais le HTML que j'avais (qui rendrait dans une page) ne serait pas analysé quand il serait renvoyé à un rappel Ajax. En fin de compte, j'ai simplement cherché manuellement dans la chaîne pour l'étiquette que je voulais, pas idéal, mais a travaillé.

+0

Cela pourrait aider si vous analysez toute la page: http://stackoverflow.com/a/1069953/854477 –