-3

次のスタイルを持つ要素があります。

<div id="myElement" style="opacity: 0.9; cursor: auto; visibility: visible;"></div>

setInterval常に ( ?) これらのスタイルがあり、それ以上でもそれ以下でもなく、まったく変更がないことを確認したいと思います。要素のすべてのスタイル (インライン CSS または外部) を取得し、それらを比較して変更がないことを確認することは可能でしょうか?

4

1 に答える 1

1

単一の要素の場合、それを設定することと最初にチェックすることの間のパフォーマンスの違いが重要であるとは思いません。次のようなこともできます。

$(document).ready(function(){
    var t = setInterval(function(){
        $('#myElement').attr('style', 'opacity: 0.9; cursor: auto; visibility: visible;');
    }, 1000);
}

通常は $('#myElement').css を使用してスタイルを設定しますが、新しいスタイルが追加されないようにするため、style 属性を設定すると目的が達成されるはずです。残念ながら、ページの他の場所にあるスタイルシートまたはスタイル ブロックへの変更は考慮されていません。これを行うには、スタイル属性をもう少し包括的にし、各値の後に「!important」を含める必要があります。

興味深いことに、なぜこれを行う必要があるのですか?問題に対するより良い解決策があるように思えます。

編集: 代わりに、clearIntervalを使用してユーザーを停止したい場合

var t = setInterval(...);

使うだけ

setInterval(...);

clearInterval は、間隔をクリアするために間隔への参照を必要とするため (ここで間違っている場合は修正してください)。その参照を作成しないと、間隔は引き続き実行されますが、クリアできません。

最終的には、これを達成するための絶対確実な方法があるとは思いません。ただし、最も決定的なユーザーを除くすべてのユーザーが、表示したいものを非表示にできないようにする必要があります。

編集 2: CSS をチェックしたいだけの場合は可能ですが、各プロパティを順番にチェックする必要があるため、少し面倒です。jQuery の css 関数を使用すると、次のようなことができます。

$(document).ready(function(){
    setInterval(function(){
        var el = $('#myElement');
        var tampered = false;
        if (el.css('display') != 'block') tampered = true;
        if (el.css('visibility') != 'visible') tampered = true;
        if (el.css('position') != 'static') tampered = true;
        ....
        if (tampered){
            // Do your thing
        }
    }, 1000);
}
于 2013-05-08T15:39:49.820 に答える