2012-03-28 14 views
1

私のページにはサードパーティのJavaScriptがいくつか含まれています。ランタイムにDOMにCSSのクラスを追加しました

<a class="foo">some link</a> 

私はこれがに変更されていることを確認する必要があります:要素をページに追加され

<a class="bar">some link</a> 

できるだけ早く後にこのページにページがロードされた後しばらくして、次の要素を追加します。私はjQueryの準備ができてハンドラに

$('a.gullSearchBtn').removeClass('gullSearchBtn').addClass('roundButton'); 

を以下を追加してみました。しかし、これは要素が追加される前に実行されるため、動作しません。私はウェブを検索しましたが、 "livequery"と呼ばれるjQueryの機能が私の問題の解決策になるかもしれませんが、動作させることはできません。

+2

は 'このページはloaded'された後、いくつかの時間があなたの質問への鍵であるページに次の要素を追加します。 「後で何か」が実際に何を意味するかを詳しく説明できますか? –

+0

@Don - 私はこの解決策が嫌いですが、自分のサイトで非常によく似たことをやってしまったのです。少なくともそれは幾分優雅にしようとする。要素はどのように追加されますか?どんなイベントやフックをつかむことができますか? http://stackoverflow.com/questions/7323716/how-to-mimic-the-jquery-plugin-livequery – mrtsherman

+0

@Don:こんにちは、私の答えをチェックすることを検討していますか?私はそれが古いものだと知っていますが、時を経て、現在の解決策なしで古い答えをチェックするために戻ってきます...!;) –

答えて

1

ネイティブスタイルを使用して、setTimeout関数を使用して終了するかどうかを確認するだけです。あなたが例えばその要素を識別するためのユニークな方法を持っている場合しかし、これはのみ動作します。それがfooクラスで唯一のアンカー要素である

マイ推奨ループ

$(document).ready(function(){ 
    checkTimer(); 
}); 

function checkTimer(){ 
    var ele = $('a.foo'); 
    if(ele.length == 0){ 
     setTimeout(function(){ 
      checkTimer(); 
     },100); 
    } 
    else { 
     ele.attr('class','bar'); 
    } 
} 

をいくつかは、あなたが使用することをお勧めします上記のループと同じ機能を提供するsetInterval()。私は個人的な経験から、これが壊れやすいことをどのようにしているかを知っていますが、ここにはそのバージョンのコードがあります。

たsetInterval()ループ DOMNodeInsertedまたはDOMSubtreeModifiedへの結合

var timer; 
$(document).ready(function(){ 
    timer = setInterval(function(){ 
     checkTimer(); 
    },100); 
}); 

function checkTimer(){ 
    var ele = $('a.foo'); 
    if(ele.length != 0){ 
     ele.attr('class','bar'); 
     clearTimeout(timer) 
    } 
} 
+3

'setInterval()'はそのような機能性のために設計されており、 'setTimeout()'を使うともっと複雑なコードになります。既に '$ '(' a.foo ')が' ele'に格納されているので、 'else'ブロックの選択をやり直す必要はありません。 –

+0

このようにすれば 'clearTimeout();'を忘れないでください –

+0

@AnthonyGrist。あなたが正しいとはいえ、それはまだ良い答えです! ** + 1 **(あなたの両方のために...) – gdoron

0
 $(function() { 
      $('.foo').click(function(e) { 
       $('body').append('<p class="gullSearchBtn">text</p>'); 
       return false; 
      }); 

      setInterval(function() { 
       if ($('.gullSearchBtn').length) 
        $('.gullSearchBtn').removeClass('gullSearchBtn').addClass('roundButton'); 
        //clearInterval() optional if you don't need to loop anymore... 
      }, 100); 
     }); 
0

あなたはこのことを考えられていますか?

オリジナルCSS

.roundButton { 
    [your rules] 
} 

変更CSS

.gullSearchBtn, .roundButton { 
    [your rules] 
} 
+0

クラスはCSS以外のもの、例えば彼が言及したサードパーティのスクリプトのために使用されるかもしれません。その場合、クラスを変更する必要があります。 –

+0

はい(そして私は*セレクタの追加を検討していると話しています) - しかし、それはスタイリング以外には使用されないかもしれません。その場合、これは所望の結果を得るための最も簡単な変更である。 –

関連する問題