programing

jQuery .data ()는 어떻게 작동합니까?

projobs 2021. 1. 16. 09:11
반응형

jQuery .data ()는 어떻게 작동합니까?


.data()내 응용 프로그램에서 사용 하고 싶습니다. 예는 도움이되지만 값이 저장되는 위치 그러나 나는 이해가 안 돼요.

나는 즉시 .DATA로 () DOM 요소에 객체를 저장하는 파이어 버그와 웹 페이지 및 검사, 나는 보이지 않는 어떤 (HTML 또는 돔 탭) 방화범의 변화를.

jQuery 소스를 살펴 보려고했지만 Javascript 지식에 비해 매우 발전하여 제 자신을 잃었습니다.

그래서 질문은 :

jQuery.data ()에 의해 저장된 값은 실제로 어디에 있습니까? 도구를 사용하여 검사 / 찾기 / 목록 / 디버그 할 수 있습니까?


출처살펴보십시오 .

간단히 살펴보면 cache2 행에서 생성 된 변수에 데이터를 저장하는 것처럼 보입니다 .

편집하다:

다음은 캐시에서 데이터를 찾는 빠른 데모입니다. http://jsfiddle.net/CnET9/

$.cache콘솔에 덤프 하고 수동으로 탐색 할 수도 있습니다.


당신은 어디에서 답을 얻은 것 같지만 여기에 방법에 대해 조금 있습니다. 이것을 사용하기 전에 알아야 할 몇 가지 규칙이 있습니다.

첨가

$ ( '. selector'). data ()에서 반환 된 객체를 사용하여 변수를 추가하는 것은 데이터 객체가 참조로 전달되기 때문에 작동하므로 속성을 추가하는 모든 위치에 추가됩니다. 다른 요소에서 data ()를 호출하면 변경됩니다. 그것은 그것이 무엇인지입니다 ...

var oData = $('#id').data();
oData.num = 0;
oData.num == $('#id').data().num; // true

개체를 추가하면 개체가 데이터 개체 내부에 배치 될뿐만 아니라 "이전에 해당 요소와 함께 저장된 데이터가 확장됩니다." -http : //api.jquery.com/data/#entry-longdesc

즉, dataObj에 obj를 추가하면

oData.obj = {};    
oData === { /*previous data*/, obj : { } }

배열을 추가해도 이전에 저장된 데이터가 확장되지는 않지만 단순한 값과 동일하게 작동하지 않습니다.

사용

저장된 간단한 값이있는 경우 변수에 배치하고 데이터 개체를 변경하지 않고 원하는 작업을 수행 할 수 있습니다.

하나

개체 또는 배열을 사용하여 요소에 데이터를 저장하는 경우주의하십시오!

변수에 저장한다고해서 데이터 값을 변경하지 않는다는 의미는 아닙니다. 함수에 전달한다고해서 데이터 값을 변경하지 않는다는 의미는 아닙니다!

그것은 그것이 무엇인지입니다. 단순하지 않다면 .. 그저 사본 일뿐입니다. :피

var data             = $("#id").data();  // Get a reference to the data object 
data.r_redirect      = "index.php";      // Add a string value
data.num             = 0;                // Add a integer value
data.arr             = [0,1,2];          // Add an array
data.obj             = { a : "b" };      // Add an object

                                         // but here is where the fun starts! 

var r_redirectString = data.r_redirect;  // returns "index.php", as expected.. cool
r_redirectString     = "changed"         // change the value and the compare :
data.r_redirect      == r_redirectString // returns false, the values are different

var oArr             = data.arr;         // Now lets copy this array
oArr.push(3);                            // and modify it.
data.arr            == oArr              // should be false? Nope. returns true.
                                         // arrays are passed by reference.
                                         // but..

var oObj             = data.obj          // what about objects?       
oObj["key"]          = "value";          // modify the variable and
data.obj["key"]     == oObj["key"]       // it returns true, too!

그래서 자원 ..

jQuery의 $ .data ()에 대해 여러 값을 저장하는 가장 좋은 방법은 무엇입니까? https://stackoverflow.com/a/5759883/1257652


다음 .data()과 같이 매개 변수없이 호출하여 검사 할 수 있습니다 .

$("div").data("thing", "value");​​​​​​
console.log($("div").data());
//or...
console.log($.data($("div").get(0)));

As for the "where", it's stored in a global jQuery cache object under a key that represents your element. Calling .data() really returns jQuery.data(yourDomElement), or tack on a key to that if you called for a specific value from it.

ReferenceURL : https://stackoverflow.com/questions/2764619/how-does-jquery-data-work

반응형