2013-12-19 1 views
2

사물을 비교, 당신은 내가 작동하지 않는 비교를 시도했습니다 자바 스크립트 라인 (38)에서 볼 수 있습니다. 변수 중 하나가 Object이기 때문에 나는 그것을 믿습니다. 다른 하나는 Element입니다. 아무도 내가이 두 사람 사이의 일치를 찾을 수있는 방법에 대한 조언을 갖고 있지 않습니까?자바 스크립트가이 바이올린에서 <a href="http://jsfiddle.net/PhilFromHeck/KzSxT/" rel="nofollow">http://jsfiddle.net/PhilFromHeck/KzSxT/</a></p> <p>요소

menuID[0] = document.getElementById('menuOne'); 
menuID[1] = document.getElementById('menuTwo'); 
menuID[2] = document.getElementById('menuThree'); 
menuID[3] = document.getElementById('menuFour'); 
$('.menu').mouseenter(function() { 
    for (var i = 0; i < 3; i++) { 
    if(menuID[i] == $(this)){ 
     //this condition is not met, there's an alert which will add more detail in the fiddle 
    } 
    } 
} 

답변

2

jQuery의 .is()을 사용하고 싶습니다.

if($(this).is(menuID[i])){ 
+0

더 적은 jQuery가 아니라 더 나은 대답입니다. 예; 이 작업은 가능하지만 기본적으로 객체를 래핑 한 다음 객체의 래핑을 수행합니다. 원하는 모든 객체는 객체입니다. – Retsam

+0

@Retsam : 예, 알았습니다. 어쨌든 여기두고 갈께. –

4

메서드 document.getElementById은 jQuery 개체가 아닌 DOM 요소를 반환합니다. mouseenter 이벤트 핸들러에서 this은 DOM 요소도 참조합니다.

그래서 그것들을 비교하기 위해 당신이 jQuery를 객체에 this을 변환하지 말아야에서 :

if (menuID[i] === this) { ... } 
+0

나는 그런 생각을하지 못했습니다. 아마 제 대답보다 낫습니다. –

0

몇 가지 문제를 여기 참조 :

하나는 jsfiddle에서, 단순히 그 첫 번째입니다 아래쪽 블록이 실행되기 전에 나열하는 4 줄의 코드가 실행되고 있지 않습니다. 나는 왜 당신이 당신이 window.onload에 붙이는 init 함수와 document.ready() 함수를 가지고 있는지 모르겠다; init이 실행되는지 확인하고 싶을 것이다.

둘째로; VisioN이 말했듯이 주된 문제는 DOM 요소 인 $(this)을 jQuery 래퍼와 DOM 요소 (이 결과는 getElementById)와 비교하려고한다는 것입니다. 그가 말한대로 this == menuID[i]가 작동합니다.

디자인 수준에서 요소를 식별하는 데 단순히 id를 사용하지 않는 이유는 무엇입니까? this.id이 ID를 제공합니다. 단순히 그것을 사용하여 어느 메뉴 div를보고 있는지 판단하지 않는 이유는 무엇입니까?

관련 문제