2017-05-23 4 views
0

두 개의 jQuery 객체가 동일한 태그 이름, 속성, 값 및 텍스트 내용과 동일한 기능을 갖고 있는지 확인할 수 있습니까?jQuery 객체 동등성 테스트 (신원이 아닌 내용의 내용 비교)

이 질문을하지 않습니다 중복 (내용 현명 정체성 현명한) 다음 중 어느 :

이들 대부분은 합성되지 않은 선택된 요소에 적용되며 다음과 같이 응답됩니다. [0] 또는 .get (0)을 사용하여 DOM 개체 비교; 또는 jQuery 1.6 이후 .is()를 사용하십시오. 그건 그렇고, 그 모든 복제본은 무엇이 있을까요? 어쨌든 이러한 방법은 이러한 목적으로 작동하지 않습니다. 예 :

> same_contents(xx, yy) 
true 
> same_contents(xx, zz) 
false 

을하지만 궁극적으로 정체성을 비교하고 있기 때문에 쉽게 또는 고전적인 방법 중 어느 것도이 작업을 수행하지 :

나는 기능을 원하는
var xx = $('<a>', {href: '#'}).append($('<b>').text('foo')); 
var yy = $('<a>', {href: '#'}).append($('<b>').text('foo')); 
var zz = $('<a>', {href: '#'}).append($('<b>').text('foobar')); 

, 그것은 (same_contents 전화), 그 다음과 같이 작동합니다 하지 내용 :

> xx == yy 
false 
> xx == zz 
false 

> xx[0] == yy[0] 
false 
> xx[0] == zz[0] 
false 

> xx.is(yy) 
false 
> xx.is(zz) 
false 
이 비교에 대한 나의 목적은 무력을 통해 정확하게 두 개의 서로 다른 방법을 사용하여 복잡한 객체 트리가 재 합성 된 것을 확인하는 것입니다

적은 반복을 통해 대 함수 호출.

답변

0

원시 HTML을 생성하고 비교하십시오. 그런 다음

function same_contents($x, $y) { 
    return $x[0].outerHTML == $y[0].outerHTML; 
} 

:

> same_contents(xx, yy) 
true 
> same_contents(xx, zz) 
false 

바보 같은 이유로 거짓 네거티브주의 :

> same_contents($('<a>', {href: '#', title: 'x'}), $('<a>', {href: '#', title: 'x'})) 
true 
> same_contents($('<a>', {href: '#', title: 'x'}), $('<a>', {title: 'x', href: '#'})) 
false 

그 문제가 있다면, 어쩌면 normalizer이 도움이 될 것이다.

+1

innerHTML이 메소드가 same_contents 일 때 더 나을지 궁금합니다. 상위 _ 부모도 비교하는 것보다는 내용 만 비교하려는 욕망을 나타낼 수 있습니다. – Taplar