0

私の目標は、次のようにhtmlコードに挿入されたjqueryを使用してすべての画像のURLを収集することです。

style="background: url(...)"

また

style="background-image: url(...)"

最初の例では、さまざまなケースがあります(繰り返し、位置の追加、タグの順序の変更など)。

正規表現が最善の方法だと思いますが、私はあまり得意ではありません。

ありがとう!

4

2 に答える 2

2

できるよ:

$('[style*="background"]').each(function(){
  // do something with each
});

styleこれにより、インラインで設定されているすべての要素がループbackgroundされます。

これは、どこかにキーワードがあることを*=意味していることに注意してください。stylebackground

于 2012-02-13T06:29:20.953 に答える
1

うん。私は正規表現を使います。

次に例を示します。

var img_urls=[];
$('[style*="background"]').each(function() {
    var style = $(this).attr('style');
    var pattern = /background.*?url\('(.*?)'\)/g
    var match = pattern.exec(style);
    if (match) {        
        img_urls.push(match[1]);
        //just for testing, not needed:
        $('#result').append('<li>'+match[1]+'</li>');
    }
});​

背景の一部ではないスタイルの URL を持つことが可能である場合、背景は画像なしである可能性がありますが、正規表現はより複雑になるはずであり、コードの保守性のために、正規表現を作成するのではなく、別の「if」を追加するだけです否定的な先読み(多くの人が読むのが難しい)。

したがって、コードは次のようになります。

    var img_urls=[];
    $('[style*="background"]').each(function() {
        var style = $(this).attr('style');
        var pattern = /background(.*?)url\('(.*?)'\)/ig
        var match = pattern.exec(style);
        if (match && match.length > 0) {
            if (match[1].indexOf(';')>0) return;                                         
            img_urls.push(match[2]);
            //just for testing, not needed:
            $('#result').append('<li>'+match[2]+'</li>');

        }
    });​

このフィドルで遊ぶことができます: http://jsfiddle.net/Exceeder/nKPbn/

于 2012-02-13T07:06:18.770 に答える