私はこのようなことをする関数を持っています:
function my_function() {
if ($('#footer').outerHeight() > 100) {
$('#footer').height(...) ;
$('#footer').css(....) ;
}
この関数はスクロールするたびに呼び出されるので、この$('#footer')を何度も実行するのは悪いことではないかと思います。もしそうなら、これを解決するための良い方法は何でしょうか?
私はこのようなことをする関数を持っています:
function my_function() {
if ($('#footer').outerHeight() > 100) {
$('#footer').height(...) ;
$('#footer').css(....) ;
}
この関数はスクロールするたびに呼び出されるので、この$('#footer')を何度も実行するのは悪いことではないかと思います。もしそうなら、これを解決するための良い方法は何でしょうか?
関数をチェーンし、セレクターを次のようにキャッシュする必要があります。
function my_function() {
var footer = $('#footer');
if (footer.outerHeight() > 100) {
footer.height(...).css(....);
}
}
var footer = $('#footer');
関数の外側を移動してグローバルにし、さらに改善することもできます。
あなたはこのようなことをすることができます:
var $footer;
function my_function() {
$footer = $footer || $('#footer');
if ($footer.outerHeight() > 100) {
$footer.height(...) ;
$footer.css(....) ;
}
}
他の答えは良いですが、ifステートメントをまったく評価したくない場合(過去)は、次のことを試してください。
var $footer;
var footerEvaled = false;
function my_function() {
if(footerEvaled == false)
{
$footer = $footer || $('#footer');
if ( $footer.outerHeight() > 100) {
$footer.height(...) ;
$footer.css(....) ;
footerEvaled = true;
}
}
}
別のオプションはwith
ステートメントを使用することですが、お勧めしません:
function my_function() {
with ($("#footer")) {
if (outerHeight() > 100) {
height(...).css(...);
}
}
}
関数の前の変数に$('#footer')を格納できます。例えば:
var footerHTML = $('#footer');
function my_function() {
if ( footerHTML.outerHeight() > 100) {
footerHTML.height(...) ;
footerHTML.css(....) ;
}
これにより、同じ要素に対して複数のJQueryインスタンスを作成する必要がなくなります。