2017-01-05 8 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>' 

Итак ..

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

Когда значение в некотором элементе стало изменено, MutationRecord.type CharacterData принимается. В моем примере прямо сейчас $ observElements [1] изменяется от '35 .00 'до '25 .00'

Но как я могу знать, что эти изменения были в emelent $ observElements [1]? В полученном target.textContent i gon только текстовое значение.

+1

Почему бы просто не использовать 'target'? Или, если вы хотите знать индекс, просто присвойте 'i' как свойство каждого элемента (например,' __index') в вашем цикле 'for'. – wOxxOm

+0

Благодарим за сообщение. Вы можете немного объяснить? Я должен добавить свойство к наблюдаемым элементам? $ observElements [i] {'element_id': [i]} – sameuser

+0

«Цель» - это текстовый узел в моем случае (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 целевым узлом до или после модификации? –

 Смежные вопросы

  • Нет связанных вопросов^_^