シングルレベルDOMの場合、これはうまく機能します。
var links = $(content).filter('img').map(function() {
return this.src;
}).toArray();
console.log(links); //["http://website.com/image.jpg", "http://website.com/image2.jpg", "http://website.com/image3.jpg"]
フィドル
複数のレベルのDOM(他の要素内にネストされた画像)がある場合は、最初の行を次のように変更します。
var links = $('<div>').append(content).find('img').map(function() {
また、任意のデータをスクレイピングする場合は$.parseHTML
、XSSから保護するために(jQuery 1.8以降)を使用する必要があります。
完全で頑丈なバージョンは次のとおりです。
var links = $('<div>').append($.parseHTML(content)).find('img').map(function() {
return this.src;
}).toArray();
上記の例では、動的に作成されたdiv
要素にコンテンツを追加しているので、1つのfind
操作だけを実行できます。結果は@ExplosionPillsの.find('img').addBack().filter('img')
バリエーションと同じです。
また、明らかに、ページにすでに画像がある場合は、.find()
新しいDOM要素を作成する代わりに、共通の祖先をルートとして使用できます。
var links = $('#imagesParent').find('img').map(function() {