JavaScript를 사용하여 사용자 지정 속성 설정


119

The DynaTree (https://code.google.com/p/dynatree)를 사용하고 있지만 문제가 발생하고 누군가가 도움이되기를 바랍니다.

다음과 같이 페이지에 트리를 표시하고 있습니다.

<div id="tree">
        <ul>
            <li class="folder">Outputs
                <ul>
                    <li id="item1" data="icon: 'base.gif', url: 'page1.htm', target: 'AccessPage'">Item 1 Title
                    <li id="item2" data="icon: 'base.gif', url: 'page2.htm', target: 'AccessPage'">Item 2 Title
                    <li id="item3" data="icon: 'base.gif', url: 'page3.htm', target: 'AccessPage'">Item 3 Title
                    <li id="item4" data="icon: 'base.gif', url: 'page4.htm', target: 'AccessPage'">Item 4 Title
                </ul>
        </ul>
    </div>

그러나 항목이 선택되었는지 여부에 관계없이 JavaScript 만 사용하지 않고 항목의 아이콘을 변경하려고합니다 .

제가 사용하고 싶은 새 아이콘은 base2.gif입니다.

다음을 사용해 보았지만 작동하지 않는 것 같습니다.

document.getElementById('item1').data = "icon: 'base2.gif', url: 'output.htm', target: 'AccessPage', output: '1'";

아무도 내가 뭘 잘못하고 있는지 알아?


3
키워드 data는 접두사입니다. 당신은 사용해야합니다data-you-attribute-name
MilkyWayJoe 2012

6
@Aaron 베스트 답변을 선택해야합니다.
0x499602D2

답변:


202

setAttribute방법을 사용하십시오 :

document.getElementById('item1').setAttribute('data', "icon: 'base2.gif', url: 'output.htm', target: 'AccessPage', output: '1'");

그러나 실제로 다음과 같이 대시와 속성이있는 데이터를 사용해야합니다.

<li ... data-icon="base.gif" ...>

그리고 JS에서 수행하려면 dataset속성을 사용하십시오 .

document.getElementById('item1').dataset.icon = "base.gif";

9
데이터 세트 속성은 HTML5와 호환되는 브라우저 만 고려되는 경우에 유용 할 수 있지만 이는 짧은 목록이며 일반 웹에 대한 더 광범위한 지원이 필요합니다. 지금은 setAttribute 를 사용하겠습니다 .
RobG

여전히 document.getElementById ( 'item1'). setAttribute ( 'data', "icon : 'base2.gif', url : 'output.htm', target : 'AccessPage', 출력을 사용하여 작동하도록 할 수 없습니다. '1'");
Aaron

2
작동하지 않는다는 것을 깨닫게 만드는 코드에서 정확히 무엇을하고 있습니까?
0x499602D2

코드를 추가하고 마지막에 경고를 추가했습니다 (코드가 완료되면 항상 표시됨). 아이콘이 변경되지 않는 것도 볼 수 있습니다. (코드를 제거하면 내 alart 디스플레이가 표시되므로 방금 추가 한 코드에 문제가 있음을 알고 있습니다.)
Aaron

IE <= 8은 setAttribute를 지원하지 않습니다
RTF

56

데이터 세트를 사용하세요

var article = document.querySelector('#electriccars'),
    data = article.dataset;

// data.columns -> "3"
// data.indexnumber -> "12314"
// data.parent -> "cars"

따라서 설정 데이터의 경우 :

getElementById('item1').dataset.icon = "base2.gif";

1
또한 (적절한 경우) camelCase를 사용하여 하이픈으로 연결된 이름을 참조하십시오 (대괄호로 묶인 문자열은 실패 함).
2540625

6
jsperf.com/html5-dataset-vs-native-setattribute 이 제안 된 방법은 훨씬 더 느립니다
racemic

4

Google에서 온 사람들에게이 질문은 데이터 속성에 관한 것이 아닙니다. OP는 비표준 속성을 HTML 개체에 추가했으며 설정 방법을 궁금해했습니다.

그러나 추가하지 않아야 사용자 정의 당신의 재산에 속성 - 당신이 해야 사용 데이터 속성을 - 예를 들어, 영업 이익은 사용해야 data-icon, data-url, data-target, 등

어쨌든 JavaScript를 통해 이러한 속성을 설정하는 방법은 두 경우 모두 동일합니다. 사용하다:

ele.setAttribute(attributeName, value);

DOM 요소 attributeNamevalue대해 주어진 속성을 변경합니다 ele.

예를 들면 :

document.getElementById("someElement").setAttribute("data-id", 2);

을 사용 .dataset하여 데이터 속성 값을 설정할 수도 있지만 @racemic이 지적했듯이 62 % 더 느립니다 (적어도 작성 시점에 macOS의 Chrome에서는). 따라서 setAttribute대신 방법을 사용하는 것이 좋습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.