2012-06-08 2 views
0

특정 클래스에서 다른 요소를 마우스로 이동할 때 요소의 id를 변경해야합니다. 그런 다음 이전에 마우스를 놓은 동일한 요소의 mouseout에서 요소 ID를 다시 변경하려고합니다.요소 ID 변경 onmouseover/onmouseout 클래스의 모든 요소

아래 코드에서 내 질문을 명확하게하기 위해 기본 HTML 코드를 작성합니다. <div id="Set1"><div id="Set2"> onmouseover <div class="tomouseover">으로 변경하고 싶습니다. 같은 요소의 Onmouseout을 원래 요소의 id를 <div id="Set1">으로 다시 변경하고 싶습니다.

<div id="Set1">Div to change id</div> 
<div class="tomouseover">Mouse over to change Set1 to Set2</div> 
<div class="tomouseover">Mouse over to change Set1 to Set2</div> 

+1 모든 아이디어! 내가

+3

jquery를 사용할 수 있습니까? –

+0

나는 선호하지 않는다. 이것은 Google 가제트에 있습니다. 그래도 할 수 있었다. – Wagtail

답변

1

당신은 데릭의 답변을 시도 할 수 있지만 곧 querySelector가 쿼크 모드 또는 IE 7 이하에서 IE8에서 지원하지 않는 것을 발견하고 그 addEventListener는 IE 8 이하에서 전혀 지원되지 않습니다. 일반 JS에 대한

의 선택은 자신의 getElementsByClassname 기능 (특히 어려운되지 않음)를 작성하거나 각 이벤트에 대해 하나 개의 수신기를 연결하고 간단한 hasClass 기능을 필요 있도록 이벤트 위임을 사용하는 것을 포함한다.

어쨌든

, 여기에 예입니다 :

어떤 javscripter 도서관에있는 또는 몇 분 안에 코딩 할 수 있어야합니다 일부 표준 라이브러리 함수 :

// Minimalist addEvent function, ok for the current web 
function addEvent(el, fn, evt) { 
    if (el.addEventListener) { 
    el.addEventListener(evt, fn, false) 
    } else if (el.attachEvent) { 
    el.attachEvent('on' + evt, fn); 
    } 
} 

// Returns true or false depending on whether element el has class classname 
function hasClassname(el, classname) { 
    var re = new RegExp('(^|\\s)' + classname + '(\\s|$)'); 
    return re.test(el.className); 
} 

작업을 수행하는 기능입니다 :

// Toggle the id. Note that this deals with the case where 
// the element to toggle isn't found to prevent errors being thrown 
function toggleId(e) { 
    e = e || window.event; 
    var el = e.target || e.srcElement; 
    var o; 

    if (hasClassname(el, 'tomouseover')) { 

    if (e.type == 'mouseover') { 
     o = document.getElementById('set1'); 

     if (o) o.id = 'set2'; 

    } else if (e.type == 'mouseout') { 
     o = document.getElementById('set2'); 

     if (o) o.id = 'set1'; 
    } 
    } 
} 

// Attach the listener onload, could also add from a bottom 
// script or inline. If inline, use `toggleId(event)` 
window.onload = function() { 
    addEvent(document.body, toggleId, 'mouseover'); 
    addEvent(document.body, toggleId, 'mouseout'); 
} 

위 다시 그렇게 IE6 및 NN 3에 모든 브라우저에서 작동하며 W3C 또는 IE 이벤트 모델 중 하나입니다 미래의 브라우저에서 작동 할 것입니다.

+0

와우. 그건 내 코드에 대한 배 밖으로,하지만 나는 그것을 줄거야! 이 문제를 지적 해 주셔서 감사합니다 - 나는 눈치 채지 못했습니다 ... – Wagtail

+1

FYI, YouTube는 IE 8도 지원하지 않습니다. –

+1

@wagtail - 당신을위한 재미있는 만화 : http://i.stack.imgur.com/5szcw.png –

2

당신이 jQuery를 사용할 수 있다면 ... 국왕 붙어있어, 여기에 마우스를 #Set1 다시 .tomouseover 및 변경 위로 이동하면 #Set2#Set1의 ID를 변경하는 코드는 때 마우스 아웃 :

$('.tomouseover').mouseover(function() { 
    $('#Set1').attr('id','Set2'); 
}).mouseout(function() { 
    $('#Set2').attr('id','Set1'); 
});​ 

js 예 : http://jsfiddle.net/XNu5H/

희망이 있습니다.

+0

JavaScript로 가져올 수 있겠습니까? D – Wagtail

+0

@ wagtail - 원하면 내 대답을보십시오. –

+2

@wagtail 이미 JavaScript이지만 jQuery입니다. – Nathan

3

순수 자바 스크립트 : (신용 나단의 대답에 간다)

var ele = document.querySelectorAll(".tomouseover"); 
for(var i=0; i < ele.length; i++){ 
    ele[i].addEventListener("mouseover", function(){ 
     document.querySelector("#Set1").setAttribute("id", "Set2"); 
    }); 
    ele[i].addEventListener("mouseout", function(){ 
     document.querySelector("#Set2").setAttribute("id", "Set1"); 
    }); 
} 
+0

멋지다 데릭. 하루에 두 가지 답변! 등급 향상을 위해 열심히 일하고 있습니까? – Wagtail

+0

': D' –

+1

+1. 나는 순수한 JavaScript LOL에'document.querySelectorAll()'이 존재한다는 것을 몰랐다.나는 항상 jQuery를 사용하며 순수한 자바 스크립트를 많이 잊어 버렸다. – Nathan