2012-06-12 10 views
10

イメージを要求せずにイメージタグを含むHTML文字列をjQueryにロードする方法はありますか?私はいくつかの情報を抽出するためにjQueryオブジェクトのセレクタを実行できるようにしたい。ブラウザがhttp://image.url/file.jpgの要求を行いますイメージを要求せずにHTML文字列をjQueryにロード

var string = $('<p><img src="http://image.url/file.jpg" /></p>'); 
string.find('img'); 

次の例を取ります。私は同じことをする方法を見つけようとしていますが、ブラウザーはイメージを要求しません。

ありがとうございました

答えて

2

あなたの質問の境界については明確にする必要があります。あなたの質問は: "画像を読み込まずにjQueryオブジェクトに変更しないで正確なHTMLをロードする方法はありますか?"という答えはNOです。 jQueryは一時的な親オブジェクトを作成し、HTMLをinnerHTMLプロパティに代入します。これによりブラウザはこのHTMLを完全に解析し、画像URLをロードします。

あなたが画像をロードすることなく、このHTML上の選択操作を実行したいのであれば、あなたはいくつかのオプションがあります:

  1. を自分.srcプロパティがなくなっているようにjQueryにHTMLを与える前にイメージタグを変更しますか、空であるか、<img>タグが画像タグではないか、存在しなくなりました。

  2. このタイプのjQuery以外のものを使用して、HTMLを解析してセレクタ操作を準備します。

なぜこれをしようとしているのか、セレクタ操作で何をしようとしているのかについて少し詳しくお知りになりましたら、

+0

私はHTMLが不変であると仮定しなければならないと考える必要があります。 – Julian

+0

@Julian - 文字列が不変でなければならず、それが必要な理由がないという質問はありません。これは単なる文字列であり、正規表現やその他の文字列解析、あるいはHTML解析でも簡単に変更できます。オリジナルを他の用途のために保存する必要がある場合、コピーを変更して使用することができます。それが不変の場合のほかに、彼らの質問に対する答えは、イメージをロードせずにjQueryにロードすることができないということです。 – jfriend00

2

あなたはこの

<img id="imgid" src="" data-src="/path_to_image"> 

のように、他の属性に画像のパスを追加することができますし、あなたがする必要があるとき、あなたはデータ-SRCとのsrc属性を置き換えることができます。この

ような何か
$('#imgid').attr('src',$('#imgid').attr('data-src')); 
5

あなたが検索を実行するために、XML文書を使用することができます。

function searchXml(xmlStr, selector) { 
    var parser, xmlDoc; 
    if(window.DOMParser) { 
     parser = new DOMParser(); 
     xmlDoc = parser.parseFromString(xmlStr, "text/xml"); 
    } else { 
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = false; 
     xmlDoc.loadXML(xmlStr); 
    } 
    return $(xmlDoc).find(selector); 
} 

console.log(searchXml('<p><img src="http://image.url/file.jpg" /></p>', 'img').attr('src'));​​​​ 

は、アクションでそれを参照してください:http://jsfiddle.net/na9Tt/

は、XMLドキュメントではなく、HTMLである点に注意してくださいHTMLに固有の検索のいくつかの特定のタイプはまったく同じようには動作しない可能性があります。

+0

+1よかったです! – VisioN

+0

これはいくつかの状況ではうまくいくと思います。しかし、私の状況では、HTMLは私が制御できないRSSフィードから来ており、おそらく解析エラーを引き起こします。 – JamieD

+0

HTMLはほとんど決して有効なXMLではありません。 XHTMLはもちろんですが、広く使われていない理由があります。 –

0

これは私が知っている限り、それはhereですが、文字列が有効なHTMLではない場合、そのページの最初のメソッドが機能しない可能性があります。画像へのリクエストを作成せず、インラインスクリプトを実行しようとしません(これは、私の使用事例に最適です - Chrome拡張機能のバックグラウンドタスク)。

var doc = document.implementation.createHTMLDocument(""); 
doc.body.innerHTML = htmlString; 
関連する問題