2010-07-23 2 views
6

IE8과 jQuery 1.4.2를 사용하고 있습니다. 내 웹 페이지가 더 이상 올바르게 렌더링되지 않으며 디버거에서 HTML로 빠르게 보게되면 모든 요소에 "jQuery1279875396122"라는 새 속성이 있습니다.이 속성은 각 노드에 고유 한 작은 정수입니다.jQuery가 노드에 이상한 속성을 추가하고 있습니다.

jQuery 소스를 보면 오래 걸리는 것이 (new Date) .getTime()에서 비롯된 것으로 볼 수 있습니다.하지만 더 많은 연구가 없으면 내 이해의 한계입니다.

이것이 내 렌더링 문제와 관련이 있는지는 잘 모르겠지만 IE8이나 다른 브라우저에서는 이전에 전혀 눈치 채지 못했습니다. 누군가 이러한 속성이 무엇인지 설명 할 수 있습니까?

+0

HTML이 유효합니까? –

+0

jQuery의'data' 기능을 사용하여 요소에 데이터를 할당합니까? 제 생각에 이러한 요소를 요소에 추가하여 고유 한 노드를 추적합니다. 그러나 이것은 어떤 식 으로든 렌더링에 영향을 미치지 않습니다. URL을 게시 할 수 있습니까? – RoToRa

+0

네, 괜찮습니다. –

답변

11

jQuery는 이러한 "expando"속성을 사용하여 요소와 관련된 데이터를 추적합니다. jQuery는 이벤트 처리를 위해 데이터 API를 사용하고 요소에 바인딩하려는 일반 데이터 ($.data 사용)를 사용합니다.

속성 (jQuery1279875396122)의 위치는 jQuery.cache과 관련된 값을 갖습니다.

jQuery가 (정기적 속성으로) 요소에 직접 데이터를 저장하지 않는 이유는 메모리 누수를 피하고 일반적으로 조금 덜 눈에 띄기 위해서입니다. 그냥 예를 들어


, 그렇게 같은 요소에 이벤트 처리기를 바인딩 할 때 : (

jQuery('div').click(doSomething); 

doSomething 기능은 초보적인 수준에, jQuery.cache에 저장됩니다, 위치 또는 참조하는 객체의 위치)가 요소의 jQuery1279875396122 속성에 할당됩니다. jQuery는 여전히 브라우저의 네이티브 API를 사용하여 요소의 이벤트에 바인딩하지만 jQuery가 실행되면 (jQuery.cache) 올바른 핸들러를 호출합니다.

편집 : 이러한 특성은 걱정할 필요가 없습니다. jQuery (이벤트 핸들러 포함)를 통해 바인딩 된 모든 데이터가있는 모든 요소에서 이들을 볼 수 있어야합니다. 이것이 렌더링 문제의 원인이라면 나는 매우 놀랄 것이다.

+0

흥미 롭습니다. 하지만 이전에는 이러한 속성을 본 적이 없으며 파이어 폭스/파이어 버그에서는 여전히 볼 수 없습니다. 또한 모든 노드에는 데이터를 저장 한 노드뿐만 아니라 하나가 있습니다. –

+0

@Charles Anderson, 이러한 노드에 의도적으로 데이터를 저장하지 않았을 수 있습니다. jQuery는 데이터 API를 내부 작업에 사용한다. 또한 expando 속성은 IE (AFAIK)의 속성으로 만 표시됩니다. FF와 다른 브라우저에서는이를 일반 DOM 속성으로 처리하므로 실제 HTML에는 표시되지 않습니다. – James

+0

그냥 렌더링에 전혀 영향을 미치지 않는다는 사실에 자신감을 표합니다. – Chris

관련 문제