2012-04-23 2 views
0

가능한 중복으로 확인되지 않은 :
How would you compare jQuery objects?jQuery를 - DOM 요소는 동일한

내가 항목의 목록에서 적극적으로 클릭 한 항목을 저장하기 위해 jQuery를 사용하고 있습니다. 새로 클릭 한 항목이 이전에 클릭 한 항목과 동일한 지 여부를 감지하여 지원 div의 표시 여부를 토글합니다. 내 코드는 다음과 같습니다.

var curPin; 

$('.pin').click(function(){ 
    var $pin = $(this); 
    if (curPin == $pin){ 
    console.log('true'); 
    } else { 
    curPin = $pin; 
    console.log('false'); 
    } 
} 

왜 이것이 평등하지 않습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?

+4

DOM 요소가 아닌 jQuery 객체를 비교하기 때문입니다. 동일한 DOM 요소가 포함되어 있어도 jQuery 객체는 항상 다릅니다 ('{foo : 42} === {foo : 42}'와는 다릅니다). –

+0

거기에 평등을 비교할 수있는 "고유 ID"와 같은 $ pin의 다른 속성이 있습니까? – rt2800

+0

요소의 속성 (예 : ID)을 비교할 가치가 없습니까? –

답변

3

사용 if ($(this).is(curPin)) 확인 할 수 있습니다.

+0

문서 : http://api.jquery.com/is/ –

1

요소를 비교하지는 않지만 jQuery 객체와 jQuery 객체는 완전히 동일한 요소가 포함되어 있어도 항상 다른 것으로 간주됩니다.

DOM 요소 자체를 비교하면 실제로 문제가 해결됩니다. Esailija에 의해 제안으로, 당신은 확인하기 위해 is() 방법을 사용할 수 있습니다 curPin에 저장 jQuery 오브젝트가 현재 요소가 포함되어 있습니다 : 당신의 요소는 ID를 가지고

var curPin; 

$(".pin").click(function() { 
    var $pin = $(this); 
    if (curPin.is(this)) { 
     console.log("true"); 
    } else { 
     curPin = $pin; 
     console.log("false"); 
    } 
} 
+2

당신은'if (curPin.is (this))'를 사용할 수 있고 OP의 다른 코드에 부작용이 없으며'curPin'을 jQuery 객체 인 – Esailija

+0

@Esailija로 사용할 수 있습니다. 'curPin'. 그에 따라 업데이트 된 답변,이 제안 주셔서 감사합니다 :) –

0

경우, 당신이 그렇게 좋아에 대해 비교하는 것을 사용할 수 있습니다 -

var curPin; 

$('.pin').click(function(){ 
    var $pin = $(this).attr('id'); 
    if (curPin == $pin) 
    {  
    console.log('true'); 
    } 
    else 
    {  
    curPin = $pin;  
    console.log('false'); 
    } 
} 
+0

요소에 ID가 없으면 어떻게 될까요? –

+0

@FelixKling 그럼 나는 비명을 질러 소리지를 것이다! :). 요점은 단지 선택 사항이었습니다. –

1

는 그냥 DOM 요소를 비교 : 요소가 같은 경우

if(curPin.get(0) == $pin.get(0)) { 
    // do something 
} 
관련 문제