2017-01-05 6 views
0

Ich versuche eine Gruppe von Elementen zu beobachten. Anzahl der Elemente können vielfältig sein: von 1 bis 10.Woher genau, wo genau MutationRecord passiert ist (mehrere Ziele)?

$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>' 

So ..

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); 
}; 

Wenn der Wert in einem Element geändert wurde, wird ein MutationRecord.type Character erhalten. In meinem Beispiel ändert sich $ observedElements [1] von '35 .00 'zu '25.00'

Aber wie kann ich wissen, dass diese Änderung in emelent $ observedElements [1] war? In empfangenen target.textContent gab ich nur Textwert.

+1

Warum nicht verwenden Sie einfach 'target' finden? Oder wenn Sie den Index kennenlernen möchten, weisen Sie einfach "i" als Eigenschaft jedes Elements (z. B. "__index") in Ihrer "for" -Schleife zu. – wOxxOm

+0

Vielen Dank für die Antwort. Kannst du etwas erklären? Ich sollte beobachteten Elementen eine Eigenschaft hinzufügen? $ observedElements [i] {'element_id': [i]} – sameuser

+0

Ein 'target' ist in meinem Fall ein Textknoten (https://developer.mozilla.org/en-US/docs/Web/API/Text). Wie kann ich das Element bestimmen, an dem die Mutation entdeckt wurde? – sameuser

Antwort

0

MutationRecord.target weist bereits auf das Element, das geändert wird, so könnte man die Wurzel mit

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

Vielen Dank für die Antwort. Versuchen Sie \ Ihren Code testen. Antwort später .. – sameuser

+0

Funktioniert gut (für jetzt). Ich markiere diese Frage als gelöst. Hoffe, alles wird gut in zukünftigen Tests :) – sameuser

+0

Ist mutationRecord.target der Zielknoten vor oder nach der Änderung? –