Imposta l'attributo personalizzato utilizzando JavaScript


119

Sto usando The DynaTree (https://code.google.com/p/dynatree) ma ho dei problemi e spero che qualcuno possa aiutarmi ..

Sto visualizzando l'albero sulla pagina come di seguito:

<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>

Tuttavia sto provando a cambiare l'icona su un elemento, non importa se è selezionato o non solo utilizzando JavaScript .

la nuova icona che desidero utilizzare è base2.gif

Ho provato a utilizzare quanto segue ma non sembra funzionare:

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

qualcuno sa cosa potrei fare di sbagliato?


3
la parola chiave dataè un prefisso. Dovresti usaredata-you-attribute-name
— MilkyWayJoe

6
@Aaron Dovresti scegliere una risposta migliore.
— 0x499602D2

Risposte:


202

Usa il setAttributemetodo:

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

Ma dovresti davvero usare i dati seguiti da un trattino e con la sua proprietà, come:

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

E per farlo in JS usa la datasetproprietà:

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

9
La proprietà del set di dati potrebbe essere utile se si considerassero solo i browser compatibili con HTML5, ma si tratta di un breve elenco e per il Web generale è richiesto un supporto più ampio. Per ora continuerei a usare setAttribute .
— RobG

ancora non riesco a farlo funzionare utilizzando document.getElementById ('item1'). setAttribute ('data', "icon: 'base2.gif', url: 'output.htm', target: 'AccessPage', output: '1' ");
— Aaron

2
Cosa stai facendo esattamente nel tuo codice che ti fa capire che non funziona?
— 0x499602D2

Ho aggiunto il codice e aggiunto un avviso alla fine (quindi si attiverà quando il codice sarà terminato) e vedo anche che l'icona non cambia. (Quando rimuovo il codice vedo il mio display di alart, quindi so che c'è qualcosa di sbagliato nel codice che ho appena aggiunto.)
— Aaron

IE <= 8 non supporta setAttribute
— RTF

56

Si prega di utilizzare il set di dati

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

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

quindi nel tuo caso per l'impostazione dei dati:

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

1
Inoltre (se appropriato), usa camelCase per fare riferimento ai nomi con trattino (le stringhe tra parentesi non funzionano).
— 2540625

6
jsperf.com/html5-dataset-vs-native-setattribute Questo metodo suggerito è molto più lento
— racemico

4

Per le persone provenienti da Google, questa domanda non riguarda gli attributi dei dati: OP ha aggiunto un attributo non standard al proprio oggetto HTML e si è chiesto come impostarlo.

Tuttavia, non è necessario aggiungere attributi personalizzati per le vostre proprietà - si dovrebbe usare gli attributi dei dati - ad esempio OP avrebbe dovuto utilizzare data-icon, data-url, data-target, etc.

In ogni caso, risulta che il modo in cui imposti questi attributi tramite JavaScript è lo stesso per entrambi i casi. Uso:

ele.setAttribute(attributeName, value);

per modificare l'attributo specificato attributeNamein valueper l'elemento DOM ele.

Per esempio:

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

Nota che puoi anche usare .datasetper impostare i valori degli attributi dei dati, ma come sottolinea @racemic, è più lento del 62% (almeno in Chrome su macOS al momento della scrittura). Quindi consiglierei di utilizzare il setAttributemetodo invece.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.