2012-04-26 3 views
7

내 페이지에서 무언가를하기 위해 document.ready 이벤트를 기다리고 있습니다.HTML 요소가 클래스를 가져올 때까지 기다린 다음

내가 변경할 수없는 다른 스크립트는 스크립트가 호출 된 후에도 아직 작동하지 않았습니다. 따라서 클래스가 아직 DOM에 없기 때문에 클래스 이름에 대한 jquery 선택이 실패합니다.

이것은 요소가 특정 클래스를 가져올 때까지 내 함수가 듣고 싶다고 말한 다음 그 요소로 무언가를 수행하는 것입니다.

어떻게해야합니까? 이 (의사 코드) 같은

+0

다른 스크립트를 제어 하시겠습니까? 코드를 다른 코드의 콜백으로 호출 할 수 없습니까? – j08691

+0

또는 다른 스크립트를 가져와 사용자 지정 이벤트를 발생 시키십시오. – rgvcorley

+0

이 질문과 중복되는 것 같습니다 : http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed –

답변

3

클래스를 추가하면 일부 이벤트가 트리거 될 수 있습니다.

예 :

$('#ele').addClass('theClass'); 
$(document).trigger('classGiven') 


$(document).bind('classGiven',function(){ 
    //do what you need 
}); 
12

뭔가 :

var timer = setInterval(function() { 
    if (element.className=='someclass') { 
     //run some other function 
     goDoMyStuff(); 
     clearInterval(timer); 
    } 
}, 200); 

또는 요소들을 삽입 할 수 있습니다 :

function flagInsertedElement(event) { 
    var el=event.target; 
} 
document.addEventListener('DOMNodeInserted', flagInsertedElement, false); 

jQuery를 버전 :

$(document).on('DOMNodeInserted', function(e) { 
    if (e.target.className=='someclass') { 
     goDoMyStuff(); 
    } 
}); 

또한 liveQuery 플러그인있다 :

$("#future_element").livequery(function(){ 
    //element created 
}); 

또는이 이벤트가 일반 이벤트 핸들러 인 경우 jQuery의 on();

+0

타이머 접근 방식은 매력처럼 작동했습니다. – k0pernikus

+0

세 줄의 downvotes가 있지만 간단한 setInterval은 많은 리소스를 사용하지 않고 잘 작동하지만 몇 초 후에 간격을 지우는 timeout 함수와 같이 클래스를 찾지 못한 경우에는 일종의 결말을 가져야합니다 . 삽입 된 DOM 노드를 청취하는 jQuery 함수가 아마 최선의 방법 일 수 있지만 핸들러가 제거되지 않으면 className에 대한 모든 삽입 된 요소를 확인하는 것이고, 이는 내 생각에 setInterval을 갖는 것보다 나쁩니다. – adeneo

+0

@adeneo 좋은 답변, 잘 했어, 고마워. :) –

0

나는 귀하의 질문에 잘못있어하지만 왜 단지 document.ready에이 같은 일반 일을하지 않으면 미안 해요? :

$("#myelement").addClass('myclass'); 

if($("#myelement").hasClass('myclass')) { 
    alert('do stuff here'); 
} 
+0

나는이 클래스와 함께 요소를 추가하지 않는다. 다른 스크립트에 의해 추가됩니다. 그리고 나는 그 변화를 파악하고 그 후에 마술을하고 싶습니다. – k0pernikus

+0

가능하면 다른 스크립트에서 콜백을 추가하는 것이 더 좋을까요? – Vytautas

관련 문제