0

だから私は網膜グラフィックスを適用するためのjQueryプラグインを書いています。要素(背景画像またはソース画像がある場合)を選択してから、その中のすべての要素(背景画像またはソース画像がある場合)を選択する必要があります。

これが私のプラグインです:

//RetinizeJS
(function($){
    $.fn.retinize = function(){
    $(this).filter(function(){
        if (this.currentStyle) 
            return this.currentStyle['backgroundImage'] !== 'none';
        else if (window.getComputedStyle)
            return document.defaultView.getComputedStyle(this,null)
                .getPropertyValue('background-image') !== 'none';
    }).addClass('bg_found');
    };
})(jQuery);

$('body').retinize();

背景画像がある場合はbody要素を返す必要があり、背景画像がある場合、<img src="" />またはCSSbackground-imageプロパティがある場合はその中のすべての要素を返す必要があります。

どうすればこれを達成できますか?

更新9:13PM:

これはクラスHAS_IMAGEを何にも追加せず、<img>削除しても要素を選択しません|| ($this.css('backgroundImage') !== 'none');

//RetinizeJS
    (function($){
        $.fn.retinize = function(){
            $this = $(this);
            $this.find('*').andSelf().filter(function(){
                return $this.is('img') || ($this.css('backgroundImage') !== 'none');
        }).addClass('HAS_IMAGE');
    };
    })(jQuery);

    $('body').retinize()
4

1 に答える 1

1

を使用して、要素に特定のCSSルール値があるかどうかを確認できます.css()。をチェックすることで、CSSまたはCSS.css('backgroundImage')を使用して設定されているかどうかに関係なく、要素に背景画像があるかどうかをチェックできるはずだと思います(つまりテストされていません)。backgroundbackground-image

その知識を使用して、次のようなフィルター関数を設定できます。

$(selector).filter(function () {
    var _this = $(this);
    return _this.is('img') || (_this.css('backgroundImage') !== 'none');
});

プラグインを使用して、それが子孫にどのようにカスケードされるかを検討する必要があります。

ただし、から<body>厳密にチェックする必要がある場合は、拡張$.fnするのは間違った方法のように聞こえます。拡張機能は、や$.fnなどのjQueryオブジェクトに作用する関数を対象としています。$('body').retinize()$('div img').retinize()

に直接拡張することで、代わりにユーティリティ関数を作成したい場合があります。そうすれば、または何か$を介して呼び出すことができます。$.retinize()

于 2012-06-21T03:56:15.973 に答える