HTML 요소에서 데이터 속성을 설정하는 방법


233

속성이있는 div가 data-myval = "10"있습니다. 값을 업데이트하고 싶습니다. 사용하면 변경되지 div.data('myval',20)않습니까? 사용해야 div.attr('data-myval','20')합니까?

HTML5와 jQuery가 혼동되고 있습니까? 조언 부탁드립니다. 감사!

편집 : 업데이트 div.data('myval')=20div.data('myval',20)만, 여전히 HTML이 업데이트되지 않습니다.


1
무엇입니까 div? jQuery 객체 또는 요소?
브래드

2
div.data('myval')=20구문이 잘못 되었기 때문에 값을 저장하는 데는 효과가 없습니다. 올바른 구문에 대한 답변을 참조하십시오. 그러나 .data()실제로 요소 속성을 업데이트하지 않고 다른 곳에 데이터를 저장합니다.
nnnnnn

gQuery를 피하려는 사람들은 이것을 사용하십시오-> div.dataset.myval = '20';
Harijs Krūtainis

답변:


448

HTML

<div id="mydiv" data-myval="10"></div>

JS

var a = $('#mydiv').data('myval'); //getter

$('#mydiv').data('myval',20); //setter

데모

참고

참조에서 :

jQuery 자체는이 .data()메소드를 사용하여 'events'및 'handle'이라는 이름으로 정보를 저장하고 내부 사용을 위해 밑줄 ( '_')로 시작하는 모든 데이터 이름을 예약합니다.

jQuery 는 HTML data()data속성을 변경하지 않습니다 .

따라서 dataHTML 에서 속성 을 변경 해야하는 경우 .attr()대신 사용해야 합니다.

HTML

<div id="outer">
    <div id="mydiv" data-myval="10"></div>
</div>

JS :

alert($('#outer').html());   // alerts <div id="mydiv" data-myval="10"> </div>
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').attr("data-myval","20"); //setter
alert($('#outer').html());   //alerts <div id="mydiv" data-myval="20"> </div>

참조 이 데모를


나는 당신이 필요 일관성 몰라,하지만 난 사용을 추천 할 것입니다 data()getsetHTML-5 데이터 속성.
Jashwant

7
@Jashwant는 대신 유용한 편집 일 수 있습니다 : CSS 규칙을 생각 [data-myval="10"]{ color: red; }하십시오. 데이터 속성 값에 따라 태그의 스타일을 지정합니다.
TechNyquist 2016 년

4
.data가 작동하지 않습니다. .attr이 작동합니다. 답을 명확하게하기 위해 답을 편집 할 수 있습니다. 그것은 첫 번째 해결책 인 것처럼 보이지만 조금 더 잘 노출 될 수 있습니다. 더 잘 설명하는 방법을 잘 모르겠습니다. 이것이 게시물을 편집하지 않는 이유입니다.
Gaucho

@Gaucho, 이제 더 나아 졌습니까?
Jashwant

1
@Gaucho .data는 최신 jQuery> = 1.4.3을 사용하는 경우에만 작동합니다. 이전 버전의 경우 .attr이 작동합니다.
Ilias

41

다음을 사용할 수도 있습니다 attr.

HTML

<div id="mydiv" data-myval="JohnCena"></div>

스크립트

 $('#mydiv').attr('data-myval', 'Undertaker'); // sets 
 $('#mydiv').attr('data-myval'); // gets

또는

$('#mydiv').data('myval'); // gets value
$('#mydiv').data('myval','John Cena'); // sets value

6
나를 위해 .attr 만 사용했습니다. 가능합니까?
Zariweya

나는 그것이 효과가 기쁘다. .data () 호출은 특별합니다. HTML5 데이터 속성을 검색 할뿐만 아니라 속성을 평가 / 파싱하려고 시도합니다. 따라서 data.myval = '{ "hello": "world"}'와 같은 속성을 사용하면 .data ()를 통해 검색하면 Object가 반환되고 .attr ()을 통해 검색하면 문자열이 반환됩니다.
Baqer Naqvi

32

javascript로 .data()html5 data-속성 을 변경하면 jQuery 가 업데이트되지 않습니다 .

jQuery .data()를 사용 data-하여 HTML 요소에서 속성 을 설정 하는 경우 jQuery 를 사용 하여 속성 .data()을 읽는 것이 좋습니다. 그렇지 않으면 속성을 동적으로 업데이트하면 불일치가 발생할 수 있습니다. 예를 들어, 참조 setAttribute(), dataset(), attr()아래. 값을 변경하고 버튼을 여러 번 누르고 콘솔을 확인하십시오.


29

바닐라 자바 ​​스크립트 솔루션

HTML

<div id="mydiv" data-myval="10"></div>

자바 스크립트 :

  • DOM의 getAttribute()속성 사용

     var brand = mydiv.getAttribute("data-myval")//returns "10"
     mydiv.setAttribute("data-myval", "20")      //changes "data-myval" to "20"
     mydiv.removeAttribute("data-myval")         //removes "data-myval" attribute entirely
    
  • 자바 스크립트 dataset속성 사용

    var myval = mydiv.dataset.myval     //returns "10"
    mydiv.dataset.myval = '20'          //changes "data-myval" to "20"
    mydiv.dataset.myval = null          //removes "data-myval" attribute
    

8

jQuery를 사용하는 경우 다음을 사용하십시오 .data().

div.data('myval', 20);

을 사용하여 임의의 데이터를 저장할 수 .data()있지만을 사용할 때는 문자열로만 제한됩니다 .attr().


14
.data()메소드는 속성을 업데이트 하지 않습니다. 즉, 저장하는 데이터는 속성에서 값을 검색 할 수 있지만 속성으로 끝나지 않습니다 (따라서 문자열이 아닌 값을 저장할 수있는 이유) . OP가 실제로 질문을했지만 속성 을 설정할 필요는 없다고 생각합니다 . data- data-
nnnnnn

1
나는 그것이 당신이 언급 한 것 외에 또는 .attr()속성을 검색 하는 데 사용 되는 다른 코드가있는 것 외에는 문제가 될 것이라고 생각하지 않습니다 . 방금 OP가 명시 적으로 (실수라면) 속성 업데이트에 대해 물었다는 것을 감안할 때 가치가 있다고 생각했습니다.
nnnnnn

1
@ 블렌더 이것은 실제로 내 질문에 대답하지 않습니다. HTML을 업데이트하고 싶지만 동시에 element.data ( 'myval')을 사용하여 HTML을 검색하십시오.
Pulkit Mittal

1
문서로드에서 생성 된 요소에는 데이터 속성과 같은 요소가 있으므로 새 동적 요소에 대해서도 그렇게하고 싶습니다. 특정 요구 사항이 없을 수도 있지만 일관성을 유지하고 싶습니다.
Pulkit Mittal

1
@PulkitMittal- .attr()실제로 "html"을 업데이트하지 않아도 DOM을 업데이트합니다. 브라우저에 "html"( .html()DOM에 의해 또는 DOM element.innerHTML) 을 제공하도록 요청하면 브라우저 는 당시 DOM 상태에 따라 효과적으로 HTML을 재생성합니다. 일종의.
nnnnnn

3

[jQuery] .data () 대 .attr () 대 .extend ()

jQuery 메소드 .data()는 올바른 경우 메소드를 사용하여 jQuery가 관리하는 내부 객체를 업데이트합니다.

data-attributes스프레드 를 업데이트 하려면-

$('body').attr({ 'data-test': 'text' });

그렇지 않으면 $('body').attr('data-test', 'text');잘 작동합니다.

이것을 달성 할 수있는 또 다른 방법은

$.extend( $('body')[0].dataset, { datum: true } );

- 어떤 속성 변경을 제한하는 HTMLElement.prototype.dataset, 추가하지HTMLElement.prototype.attributes .


2

data-attribute를 설정하는 또 다른 방법은 dataset 속성을 사용하는 것 입니다.

<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>

const el = document.querySelector('#user');

// el.id == 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''

// set the data attribute
el.dataset.dateOfBirth = '1960-10-03'; 
// Result: el.dataset.dateOfBirth === 1960-10-03

delete el.dataset.dateOfBirth;
// Result: el.dataset.dateOfBirth === undefined

// 'someDataAttr' in el.dataset === false
el.dataset.someDataAttr = 'mydata';
// Result: 'someDataAttr' in el.dataset === true

0

jQuery와 DOM을 동기화 상태로 유지하려면 간단한 옵션이 있습니다.

$('#mydiv').data('myval',20).attr('data-myval',20);        
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.