2011-09-29 3 views
1

J'ai un document XML (à partir d'une alimentation), que je suis extraire des valeurs de:trouver tag <img> intérieur chaîne de texte

$(feed_data).find("item").each(function() { 
    if(count < 3) { 
    //Pull attributes out of the current item. $(this) is the current item. 
     var title = $(this).find("title").text(); 
     var link = $(this).find("link").text(); 
     var description = $(this).find("description").text(); 

maintenant à l'intérieur « description » je dois obtenir l'élément img, mais me cause des problèmes. "descripttion" est un élément de chaîne normal et il semble que je ne puisse pas appeler la méthode ".find()", alors que dois-je faire?

J'ai essayé d'appeler .find():

var img = $(this).find("description").find("img"); 

Mais il est un pas aller. L'img est enveloppé dans une durée, mais je ne peux pas y arriver non plus. Aucune suggestion? Je préférerais éviter les sous-chaînes et les solutions regex, mais je suis à court de ressources.

J'ai aussi essayé tourner la « description » dans un objet XML comme ceci:

var parser = new DOMParser(); 
var desc = parser.parseFromString(test,'text/xml'); 

$(desc).find("img").each(function() { 
    alert("something here"); 
}); 

Mais cela ne fonctionne pas non plus. Il semble que ce serait le cas, mais je reçois une erreur «document pas bien formé».

+2

veuillez poster votre code html – Flatlin3

+0

À tout le moins s'il vous plaît envisager de poster la chaîne avec laquelle vous travaillez. Sinon, nous essayons simplement de deviner comment aider. –

Répondre

3

Essayez enfermer le contenu de la balise de description dans un div divisible, qui a semblé fonctionner mieux pour moi, et a permis au .find() de jQuery de fonctionner comme prévu.

par exemple.

$(feed_data).find("item").each(function() { 
    if(count < 3) { 
     //Pull attributes out of the current item. $(this) is the current item. 
     var title = $(this).find("title").text(); 
     var link = $(this).find("link").text(); 
     var description = '<div>' + $(this).find("description").text() + '</div>'; 
     var image = $(description).find('img'); 
+0

Merci, c'est similaire à la solution que j'ai fini avec, et je suis sûr que cela fonctionnerait aussi bien. – mac

+0

Ive a ajouté ma solution comme réponse au cas où quelqu'un serait intéressé ... – mac

1

vous devriez peut-être essayer de convertir le texte de description de balise html et puis essayer de le traverser via jquery

$('<div/>').html($(this).find("description").text()).find('img') 

Note: non testé

+0

+1 pour être similaire à mon approche, qui était la chose qui a fini par fonctionner. – GregL

3

Bonjour et merci pour les réponses rapides. J'ai donné la tique à GregL, car je suis sûr que sa solution aurait fonctionné, car le principe est le même que ce que j'ai fini avec. Ma solution ressemble à ceci:

$(feed_data).find("item").each(function() { 
     if(count < 3) { 
      //Pull attributes out of the current item. $(this) is the current item. 
      var title = $(this).find("title").text(); 
      var link = $(this).find("link").text(); 
      var description = $(this).find("description").text(); 

      var thumbnail = ""; 
      var temp_container = $("<div></div>"); 
      temp_container.html(description); 
      thumbnail = temp_container.find("img:first").attr("src"); 

enveloppez donc la chaîne dans une div, puis utilisez « trouver() » pour obtenir le premier élément img. J'ai maintenant la source d'image, qui peut être utilisée au besoin.

Questions connexes