jQuery의 data()
api를 사용하여 요소의 모든 데이터 특성을 검색하고 싶습니다. 하지만이 API의 캐시 특성은 실제로 성가신 일입니다. 때로는 자바 스크립트에서 요소의 일부 데이터 속성을 변경해야하지만 data()
API는 항상 각 데이터 속성의 초기 값을 반환합니다. 따라서 attr()
을 사용하여 요소의 각 데이터 속성에 액세스하여 최신 값을 가져와야합니다. 이 캐시를 극복하고 data()
을 호출 할 때마다 항상 최신 값을 반환하는 방법이 있습니까?요소 데이터가 변경 될 때 jQuery의 data() 특성이 업데이트되지 않습니다.
9
A
답변
16
짧은 답변 : 데이터 속성이 항상 jQuery에 의해 설정된다는 것을 보장 할 수 없다면, 동적으로 설정된 데이터 속성에 대해 jQuery .data()를 사용하지 마십시오.
아래어느 솔루션은 작동합니다
- 사용 DOM을 대신
- 사용의 jQuery .attr()를 대신
을 여기 정말 생각하지 않는 relevant part from the jQuery documentation이 (얼마나 많은이 하이라이트입니다 jQuery 사용자를 놀라게 할 수 있습니다.) :
.데이터 속성은 처음으로 d 속성에 액세스 한 다음 더 이상 액세스하거나 변경하지 않습니다 (모든 데이터 값은 jQuery에 내부적으로 저장됩니다). 많은 클라이언트 측 템플릿 언어는 데이터 속성을 포함, DOM을 제작할 수 있습니다 하지 사용 jQuery를이 속성을 설정하는 이유에 대해서는
DevTools로 같이 (동적으로 내장 된 HTML을 감안할 때 :
document.querySelector('form').getAttribute('data-test');
JQuery와이에 (만료 된 이전 값을 반환 :
<form data-test="300" ...
DOM API는 진실을 말한다 케이스, 19000) :
$('form').data('test');
jQuery attr
$('form').attr('data-amount');
1
또한 데이터 캐시를 재설정 속성을 업데이트 한 후 jQuery의 .removeData() 방법을 사용할 수 있습니다 : 현재 값을 eturn. 예를 들어
:
> document.querySelector('.sub-panels')
<div class="sub-panels">…</div>
> document.querySelector('.sub-panels').setAttribute('data-test', 300);
undefined
> document.querySelector('.sub-panels')
<div class="sub-panels" data-test="300">…</div>
> $('.sub-panels').data('test')
300
> document.querySelector('.sub-panels').setAttribute('data-test', 400);
undefined
> $('.sub-panels').data('test')
300
> $('.sub-panels').removeData();
[div.sub-panels, prevObject: jQuery.fn.init(1), context: document, selector: ".sub-panels"]
> $('.sub-panels').data('test')
400
관련 문제
- 1. ko.observablearray가 변경 될 때 테이블이 업데이트되지 않습니다.
- 2. 필터가 변경 될 때 Datagrid가 업데이트되지 않습니다.
- 3. 데이터베이스가 변경 될 때 RecyclerView가 업데이트되지 않습니다.
- 4. knockout.js 데이터가 모달로 업데이트 될 때 업데이트되지 않습니다.
- 5. AngularJS : 기본 데이터가 변경 될 때 필터링 된 데이터가 업데이트되지 않습니다.
- 6. 선택 옵션이 변경 될 때 Knockoutjs 모델이 업데이트되지 않습니다.
- 7. 서비스 변수가 변경 될 때 범위 값이 업데이트되지 않습니다.
- 8. 버튼이 반응하지 않습니다. 화면 크기가 변경 될 때 업데이트되지 않습니다.
- 9. 기본 객체가 변경 될 때 ListView가 업데이트되지 않습니다
- 10. 보기 모델이 변경 될 때 JsViews # 인덱스가 업데이트되지 않습니다.
- 11. 데이터가 업데이트 될 때 d3js 요소가 업데이트되지 않음
- 12. jquery의 order 요소 변경
- 13. 데이터가 변경 될 때 telerik 차트 업데이트
- 14. 소켓이 생성 될 때 브라우저가 업데이트되지 않습니다.
- 15. 내용이 변경 될 때 DataGridView 스타일이 업데이트되지 않습니다.
- 16. WCF MaxReceivedMessageSize가 web.config에서 변경 될 때 업데이트되지 않습니다.
- 17. DOM 요소가 변경 될 때 ng-model 변수가 업데이트되지 않습니다.
- 18. 기본 데이터가 변경 될 때 커서 로더가 새로 고침되지 않습니다.
- 19. dup (licated) ActiveRecord 저장시 특성이 업데이트되지 않습니다.
- 20. 데이터가 변경 될 때 UIControl에 반응하는 방법
- 21. 데이터가 변경 될 때 전자 메일 트리거
- 22. 데이터베이스에서 데이터가 변경 될 때 알림 받기
- 23. 뒤로 버튼을 눌렀을 때 데이터가 업데이트되지 않습니다.
- 24. 함수를 호출 할 때 데이터가 업데이트되지 않습니다.
- 25. 클릭 후 데이터가 * 업데이트되지 않습니다
- 26. 기본 특성이 무스에서 변경 될 때 지연된 특성 다시 작성
- 27. 동적으로 변경 될 때 jQuery 변수가 업데이트되지 않음
- 28. vue, js vue-router 2 구성 요소 데이터가 업데이트되지 않습니다.
- 29. Facebook 북마크 데이터가 업데이트되지 않습니다.
- 30. jQuery의 현재 요소 배경 변경
이 아닌 캐시 일,'내부 데이터()'데이터를 저장 그리고 당신은 당신이'사용해야 어떤 이유로 속성을 변경해야하는 경우, 데이터 특성을 변경하지 않습니다 attr()'을 사용하지만, 데이터를 설정하고 가져 오는 데 일관되게'data()'를 사용한다면 올바른 데이터를 얻으므로 문제가되어서는 안됩니다. – adeneo
_ "때로는 자바 스크립트에서 요소의 일부 데이터 속성을 변경해야합니다."- 왜? 페이지가로드 된 후에 요소에 대해 데이터를 저장해야하는 경우'.data ('key', 'value')'를 사용할 수 있습니다. 이것은 데이터를 속성으로 저장하지 않지만 무엇 때문에? – nnnnnn
@nnnnnn 모든 클라이언트 측 템플릿 언어는 데이터 속성을 포함 할 수있는 DOM을 빌드하며, jQuery에서는 그렇지 않습니다. – mikemaccana