2014-11-11 2 views
0

이 요소가있는 경우 일부 코드를 실행하려면 <div id="element">Some text</div> jquery를 사용하십시오. 지금까지요소가있는 경우 일부 코드 실행

내 코드 :

setInterval(function(){check()}, 100); 

function check() { 

    var count = document.getElementById("count"); 
    if(document.getElementById("element") && count.value != 1) { 
     //some code 
     count.value = 1; 
    } 

} 

그것은 작동하지만 이것이 나의 목표에 도달하는 아주 나쁜 방법이라고 생각합니다. 간편한 솔루션을 원하지만 찾을 수 없습니다.

+0

[MutationObserver] (https://developer.mozilla.org/en/docs/Web/API/MutationObserver)에서 볼 수 있습니다. 지원되지 않는 경우 지금 당신이 가진 방법 –

+0

옳은 일을하고 있습니다. 기분이 좋지는 않지만 그렇습니다. –

+0

jQuery를 사용하려면 [length] (http://api.jquery.com/length/) – empiric

답변

0

길을 잃을 수 없어 가장 신뢰할 수 있습니다.

그러나 count 요소에서 change 이벤트를 청취하고 element이 있으면 값을 재설정 할 수 있습니다. 이는 인증 코드가 변경 될 때만 실행된다는 것을 의미합니다.

+0

_ "실패 할 수 없으므로"_ - 'count'요소가 없으면 오류를 발생시킵니다. – nnnnnn

+0

@nnnnnn 어쨌든 할 일이 없기 때문에 비동기 코드 ('interval'에서 독립적으로 실행) 때문에 더 이상의 코드 실행을 차단하지 않기 때문에 문제가되지 않습니다. 카운터가 없다는 것은 오류 조건이므로 여기에 오류가 발생하는 것은 맞습니다. –

0

처음 하시겠습니까?

안녕하세요?

$(document).ready(function(){ 
    if($(#element)) { do something }; 
}); 

편집 : 검색

10 초 후 :

$("#someDiv").bind("DOMSubtreeModified", function() { 
    alert("tree changed"); 
}); 
+0

질문은 명확하게 값을 모니터링하고 주어진 요소가있을 때 잠그려고합니다. 당신의 대답은 도움이되지 않습니다 ... –

+0

그런 다음 jquery 문서를 읽으려고 시도하고 원하는 작업을 수행하거나 처리 방법을 처리하는 핸들러를 찾으십시오. 도움의 접근 방식에 감사하는 방식처럼 –

+0

내 의견을 수정했습니다 ... 이제 찾을 수 있습니다. DOMsubtreeModified 이벤트에 핸들러를 등록하기 위해 $ (body)와 같은 선택기 ... DOM의 하위 트리에 뭔가 문제가있을 때이를 인식합니다. - 꽤 똑바로 앞으로 ... 대기열을 수행 할 필요가 없습니다 –

0

당신은 (요소가 삽입되거나 수정 될 때) DOM 이벤트를 듣고에만이 시간에 당신의 상태를 확인할 수 없습니다 매 시간마다.

당신이 DOM 이벤트에 대한 몇 가지 정보가 필요하면 당신은 좀 걸릴 수 있습니다 : http://en.wikipedia.org/wiki/DOM_events#HTML_events (돌연변이 이벤트)

+0

그러나 어떤 브라우저가 DOM 이벤트를 지원합니까? 해당 위키 백과 페이지의 돌연변이 이벤트는 현재 지원되지 않습니다 ... – nnnnnn

+0

http://caniuse.com/#feat=mutationobserver –

0

하나 내가

jQuery(function() { 
 

 
    if (window.MutationObserver) { 
 
    var target = document.querySelector('#myparent'); 
 

 
    // create an observer instance 
 
    var observer = new MutationObserver(function(mutations) { 
 
     mutations.forEach(function(mutation) { 
 
     [].forEach.call(mutation.addedNodes, function(el, i) { 
 
      if (el.id == 'element') { 
 
      check(); 
 
      //if you don't want to listen any more remove the listener 
 
      //observer.disconnect(); 
 
      } 
 
     }) 
 
     }); 
 
    }); 
 

 
    // configuration of the observer: 
 
    var config = { 
 
     childList: true 
 
    }; 
 

 
    // pass in the target node, as well as the observer options 
 
    observer.observe(target, config); 
 

 
    } else { 
 
    setInterval(function() { 
 
     if (document.getElementById("element")) { 
 
     check(); 
 
     } 
 
    }, 100); 
 
    } 
 

 
    function check() { 
 
    var count = document.getElementById("count"); 
 
    if (count.value != 1) { 
 
     //some code 
 
     count.value = 1; 
 
    } 
 
    } 
 
}); 
 

 
$('button').click(function() { 
 
    $('#myparent').append('<div id="element">Some text</div>'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button>Add</button> 
 
<input id="count" /> 
 
<div id="myparent"></div>
같은 대체 메커니즘 MutationObserver을 사용하는 방법에 대한 것입니다 생각할 수있는 솔루션

참고 : 사용자가 동적 요소에 대한 정적 부모 요소 (예 :위의 예에서요소)

관련 문제