2011-09-19 11 views
0

XMLフィードを解析する際に問題が発生しました。次のコードは、XMLフィードを解析し、ニュースデータでページを埋め込みます。私が持っている問題は、記述ノードがHTMLでエンコードされていて、そのノードに含まれるimgタグのsrcを取り除く必要があるということです(各descriptionノード内に1つのイメージタグが含まれています)。Jquery - htmlエンコードされた文字列からsrcデータを引きます。

私は正規表現の知識が限られていますが、フィルタアプローチを使用してsrcコードを削除しようとしましたが、以下の例は機能しません。

私はこの1つで私の髪を引っ張っているので、どんな助けも喜んで受け取ります!ここ

$(xml).find("item").each(function() { 
    var i = $(xml).find("item").index(this); 

    var imgStripSrc = $('item:eq(1) description', xml).filter(function() { 
     return /(?: src=")(.+)(?:")/ 
    }) 

    if (i < 1) { 
     var newsTitleOne = $('item:eq(0) title', xml).text(); 
     if (newsTitleOne.length > 40) { 
      newsTitleOne = newsTitleOne.substring(0, 30) + ".."; 
     } 
     $(".newsIOne .newsText .t").empty(); 
     $(".newsIOne .newsText .t").append(newsTitleOne); 
    } else { 
     var newsTitleGen = $('item:eq(' + i + ') title', xml).text(); 
     if (newsTitleGen.length > 80) { 
      newsTitleGen = newsTitleGen.substring(0, 74) + ".."; 
     } 
     var newsTitleLinkHid = $('item:eq(' + i + ') link', xml).text(); 
     var newsRow = $('<div class="newsRow"><a href="' + newsTitleLinkHid + '" target="_blank">' + newsTitleGen + '</a><img src=' + imgStripSrc + '/></div>'); 
     $(".newsRows").prepend(newsRow); 
    } 
}); 

XMLの例は、 - http://fb.mobilechilli.com/chilli_news_reviews/NewsReviews%20Build/tstXML.xml

+0

また、扱っているXMLのサンプルを投稿してください。 – Tomalak

+0

あなたの投稿やpastebin.comに問題のXMLを添付できますか? –

+0

sure - ここのXML項目の例 - http://fb.mobilechilli.com/chilli_news_reviews/NewsReviews%20Build/tstXML.xml – Dancer

答えて

1

あなたはjQueryのHTML文字列からDOMを構築することができますので、あなたはすべてので正規表現をいじる必要はありませんという事実を利用することができます。私はあなたのコードを書き直しました:

$(".newsIOne .newsText .t").empty(); 
$(xml).find("item").each(function(i) { 
    var html  = $($("description", this).text()), 
     imgsrc = $("img:first", html).attr("src"), 
     title = $("title", this).text(), 
     link  = $("link", this).text(), 
     ellipsis = String.fromCharCode(8230); 

    if (i == 0) { 
     if (title.length > 40) { 
      title = $.trim(title.substring(0, 30)) + ellipsis; 
     } 
     $(".newsIOne .newsText .t").text(title); 
    } else { 
     if (title.length > 80) { 
      title = $.trim(title.substring(0, 74)) + ellipsis; 
     } 
     $(".newsRows").prepend(
      $('<div class="newsRow">') 
      .append("<a>", {target: "_blank", href: link, text: title}); 
      .append("<img>", {src: imgsrc}); 
     ); 
    } 
}); 

ノート

  • thisは常に、あなたが作業している現在の要素を指し、そのeach()のボディに、あなたはそれらの$('item:eq(' + i + ') title', xml)の周りにジャグリングする必要はありません。
  • $(description, this).text()は、HTML文字列を取り出し、別の文字列にラップします。$()からDOMを作成します。それを操作して見つけることができます<img>
  • 実際の省略記号("…")があります。
  • 連結された文字列からHTMLを作成するときは、自分の責任で行ってください。私は便利なヘルパー関数jQueryを代わりに組み込みました。
  • ループインデックスは、each()から引数として渡されます。自分で見つけたりカウントしたりする必要はありません。
+0

thats perfect - おかげさまであなたの助けを求める – Dancer

関連する問題