2017-01-05 15 views
0

私は要素のグループを観察しようとしています。要素の量は、様々であることができる:1からだから10どのようにMutationRecordがどこで起こったのか(複数のターゲット)を知るには?

$observedElements = document.querySelectorAll('em.price'); 
// in that time length will be 3. 

// $observedElements[0] is a '<em class='price'>10.15</em>' 
// $observedElements[1] is a '<em class='price'>35.00</em>' 
// $observedElements[2] is a '<em class='price'>48.95</em>' 

に..いくつかの要素の値が変更になったとき、MutationRecord.typeはCharacterDataを受信し

var observer = new MutationObserver(function(MutationRecord) { 
    MutationRecord.forEach(function(MutationRecord) { 
     if (MutationRecord.type == 'characterData') { 
      console.log ('got it ... in elem. № ? '); 
      // which element is affected by this mutation? [0], [1] or [2] ?  
     }; 
    }); 
}); 

var observerConfig = { attributes: false, childList: true, characterData: true, subtree: true, }; 

for (var i = 0; i < $observedElements.length; i++) { 
    observer.observe($observedElements[i], observerConfig); 
}; 

。 今の私の例では、$ obserElements [1]は'35 .00 'から'25 .00'に変更されます

しかし、この変更はemelent $ observedElements [1]にありましたか? 受信したtarget.textContentには、テキスト値のみが含まれます。

+1

でルートを見つけることができるのはなぜ単に 'target'を使わないのでしょうか?あるいは、インデックスを知りたければ、 'for'ループで各要素のプロパティ(' __index'など)に 'i'を代入するだけです。 – wOxxOm

+0

ありがとうございます。少し説明できますか?私は観測された要素にプロパティを追加する必要がありますか? $ observedElements [i] {'element_id':[i]} – sameuser

+0

'target'は私の場合のテキストノードです(https://developer.mozilla.org/en-US/docs/Web/API/Text)。どのように私は突然変異が検出された要素を決定するためにそれを使用することができますか? – sameuser

答えて

0

MutationRecord.targetはすでに変更項目を指すので、あなたは

function findObserver(mutationRecord) { 
    for (var i = 0; i < $observedElements.length; i++) { 
    if ($observedElements[i].contains(mutationRecord.target)) { 
     return $observedElements[i]; 
    } 
    } 
    return null; 
} 
+0

ありがとうございます。 \あなたのコードをテストしようとしています。後で回答してください。 – sameuser

+0

うまく動作します(今のところ)。私はこの問題を解決したものとしてマークします。将来のテストですべてがうまくいくことを願っています:) – sameuser

+0

mutationRecord.targetは変更前または変更後のターゲットノードですか? –

関連する問題