2017-01-05 7 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); 
}; 

. 내 예제에서 지금 $ observedElements [1]은 '35 .00 '에서 '25.00'로 변경됩니다.

그러나이 변경 사항은 emelent $ observedElements [1]에 있었는지 어떻게 알 수 있습니까? 받은 target.textContent에 텍스트 값만 있습니다.

+1

와 루트를 찾을 수 있을까? 또는 인덱스를 알고 싶다면'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 이미 변경된 항목을 가리키는 때문에 단순히`target`를 사용 왜 당신은

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

답장을 보내 주셔서 감사합니다. \ test 코드를 사용하려고합니다. 나중에 대답 .. – sameuser

+0

잘 작동합니다 (당분간). 나는이 질문을 해결 된 것으로 표시한다. 희망은 모두 미래의 테스트에서 괜찮을 것입니다 :) – sameuser

+0

mutationRecord.target은 수정 전후의 대상 노드입니까? –