2016-06-01 7 views
1

私はMutationObserver(またはこの時点で何か他のもの)を使用してテーブルの変更をリスンしたいと思っています。検索を通して濾過(表示または非表示に<tr> -elementをトグルする) テーブルの行が変更されているかどうかをチェック

  • チェックボックスを通して濾過(再度トグル)
  • <tr>を削除

    1. :私table -> tbody -> tr要素は、以下のような様々な方法で変更することができます-elements

    MutationObserverを使用することで、テーブルの変更を確認できます。これは、要素を削除すると(子リストとサブツリーが変更されるため)機能しますが、要素の属性が変更されたときにはトリガーしません。

    var observer = new MutationObserver(function(mutations, observer) { 
        updateTable(); 
    }); 
    observer.observe(document.querySelector('#reports'), { childList: true, characterData: true, subtree: true }); 
    

    私のHTML::ここに私の観察者のそれはtable -> tbody -> tr -element背景を更新します。

    <table id="reports"> 
        <thead>........ 
        <tbody> 
         <tr><td>Stuff here 1</td></tr> 
         <tr><td>Stuff here 2</td></tr> 
         <tr><td>Stuff here 3</td></tr> 
        </tbody> 
    </table> 
    

    マイupdateTable()機能は非常に単純です。つまり、オブザーバーで属性の変更を確認すると、無限ループになります。

    ああ、誰かが<tr>要素を隠してしまったことを意味します。背景を変えよう。ああ、誰かが背景を変えた!背景を変えさせてください。ああ見て! ....無限ループ

    どうすればよいですか?ありがとう

  • +0

    のために働くなら、私に知らせて、私はちょうど私が(など、追加、削除、選択する)必要があり、それは非常にやり過ぎであるすべてのイベントに ')' updateTableを(スローする可能性。 – MortenMoulder

    +0

    このhttps://developer.mozilla.org/en/docs/Web/API/MutationObserverによれば、突然変異観測者のためにいくつかの構成を設定することができます。標的の属性を明らかに観察するものがあります。あなたはそれを試しましたか? –

    +0

    私は{attributes:true} –

    答えて

    1

    免責事項:これはパフォーマンス上の問題ではありません。

    しかし、コールバックを実行する前にオブザーバを無効にするのはどうですか?あなたが#reportsを変更したときに

    var observe = function(){ 
        var observer = new MutationObserver(function(mutations, observer) { 
         observer.disconnect(); // stop watching changes 
         updateTable(); // do your changes 
         observe(); // start watching for changes again 
        }); 
        observer.observe(document.querySelector('#reports'), { childList: true, attributes: true, subtree: true }); 
    } 
    

    だから、最初の時間のようなものは、あなただけの

    observe(); 
    

    だろう、それはあなたに、あなたはあなたのDOMの変更を行うことができますので、あなたは、それを外して、MutationObserver火災、となります再び観察者を置くだろう。

    コードテストされていないので、これはあなた

    +1

    絶対に魅力のように働いています。属性の変更をチェックする必要があるので、 'characterData'の代わりに' attributes'を追加しました。どうもありがとう! – MortenMoulder

    +0

    素晴らしい!コメントで十分ではないことを申し訳ありません –

    +0

    心配はありません。それは素晴らしい作品です!ありがとう! – MortenMoulder

    関連する問題