source

jQuery 객체 등식

ittop 2023. 8. 20. 12:39
반응형

jQuery 객체 등식

두 jQuery 개체가 동일한지 확인하려면 어떻게 해야 합니까?특정 jQuery 개체에 대한 배열을 검색할 수 있으면 좋겠습니다.

$.inArray(jqobj, my_array);//-1    
alert($("#deviceTypeRoot") == $("#deviceTypeRoot"));//False
alert($("#deviceTypeRoot") === $("#deviceTypeRoot"));//False

jQuery 1.6부터 사용할 수 있습니다. 아래는 1년 이상 전의 답변입니다.

var a = $('#foo');
var b = a;


if (a.is(b)) {
    // the same object!
}

두 변수가 실제로 동일한 개체인지 확인하려면 다음과 같이 하십시오.

var a = $('#foo');
var b = a;

...그런 다음 고유 ID를 확인할 수 있습니다.새 jQuery 개체를 만들 때마다 ID를 얻습니다.

if ($.data(a) == $.data(b)) {
    // the same object!
}

하지만, 간단한 방법으로 동일한 것을 달성할 수 있습니다.a === b위의 내용은 적어도 다음 개발자에게 당신이 테스트하고 있는 것을 정확히 보여줄 수 있습니다.

어쨌든, 그건 아마 당신이 추구하는 것이 아닐 겁니다.서로 다른 두 jQuery 개체에 동일한 요소 집합이 포함되어 있는지 확인하려면 다음을 사용할 수 있습니다.

$.fn.equals = function(compareTo) {
  if (!compareTo || this.length != compareTo.length) {
    return false;
  }
  for (var i = 0; i < this.length; ++i) {
    if (this[i] !== compareTo[i]) {
      return false;
    }
  }
  return true;
};

원천

var a = $('p');
var b = $('p');
if (a.equals(b)) {
    // same set
}

여전히 모르는 경우 다음 방법으로 원래 개체를 다시 가져올 수 있습니다.

alert($("#deviceTypeRoot")[0] == $("#deviceTypeRoot")[0]); //True
alert($("#deviceTypeRoot")[0] === $("#deviceTypeRoot")[0]);//True

왜냐면$("#deviceTypeRoot")또한 선택기가 선택한 개체의 배열을 반환합니다.

$.fn.equals(...)해결책은 아마도 가장 깨끗하고 우아한 것일 것입니다.

저는 이렇게 빠르고 더러운 것을 시도해 보았습니다.

JSON.stringify(a) == JSON.stringify(b)

아마도 비용이 많이 들겠지만, 편안한 것은 암묵적으로 재귀적인 반면 우아한 해결책은 그렇지 않다는 것입니다.

내 2센트야.

일반적으로 다음 비교와 기능적으로 동일하기 때문에 $(foo)와 $(foo)를 비교하는 것은 좋지 않습니다.

<html>
<head>
<script language='javascript'>
    function foo(bar) {
        return ({ "object": bar });
    }

    $ = foo;

    if ( $("a") == $("a") ) {
        alert ("JS engine screw-up");
    }
    else {
        alert ("Expected result");
    }

</script>

</head>
</html>

물론 당신은 "JS 엔진 망치기"를 결코 기대하지 않을 것입니다.저는 jQuery가 무엇을 하고 있는지 확실히 하기 위해 "$"를 사용합니다.

$("#foo")를 호출할 때마다 실제로는 새 개체를 반환하는 jQuery("#foo")를 수행하고 있습니다.그래서 그것들을 비교하고 같은 물체를 기대하는 것은 옳지 않습니다.

하지만 여러분이 할 수 있는 일은 다음과 같습니다.

<html>
<head>
<script language='javascript'>
    function foo(bar) {
        return ({ "object": bar });
    }

    $ = foo;

    if ( $("a").object == $("a").object ) {
        alert ("Yep! Now it works");
    }
    else {
        alert ("This should not happen");
    }

</script>

</head>
</html>

그래서 당신은 아마도 당신의 실제 프로그램에서 jQuery 객체의 ID 요소를 비교해야 할 것입니다.

... 
$(someIdSelector).attr("id") == $(someOtherIdSelector).attr("id")

그게 더 적절합니다.

먼저 이 기능을 사용하여 키를 기준으로 개체를 정렬합니다.

function sortObject(o) {
    return Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
}

그런 다음 이 함수를 사용하여 개체의 문자열화된 버전을 비교합니다.

function isEqualObject(a,b){
    return JSON.stringify(sortObject(a)) == JSON.stringify(sortObject(b));
}

여기 예가 있습니다.

개체 키의 순서가 다르고 값이 같다고 가정합니다.

var obj1 = {"hello":"hi","world":"earth"}
var obj2 = {"world":"earth","hello":"hi"}

isEqualObject(obj1,obj2);//returns true

Underscore.jsisEqual 메서드 사용 http://underscorejs.org/ #isEqual

내용이 동일한지 확인하려면 JSON.stringify(obj)사용하십시오.

예 - vara = {key:val};

var b = {key:val};

JSON.stringify(a) == JSON.stringify(b) ----> 내용이 동일하면 true가 됩니다.

언급URL : https://stackoverflow.com/questions/3176962/jquery-object-equality

반응형