Używam The DynaTree (https://code.google.com/p/dynatree), ale mam pewne problemy i mam nadzieję, że ktoś może pomóc.
Drzewo wyświetlam na stronie jak poniżej:
<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>
Jednak próbuję zmienić ikonę na elemencie bez względu na to, czy jest zaznaczona, czy nie tylko przy użyciu JavaScript .
nowa ikona, której chcę użyć, to base2.gif
Próbowałem użyć następujących, ale wydaje się, że nie działają:
document.getElementById('item1').data = "icon: 'base2.gif', url: 'output.htm', target: 'AccessPage', output: '1'";
ktoś wie, co mogę robić źle?
javascript
dom
dynatree
Aaron
źródło
źródło
data
jest przedrostkiem. Powinieneś używaćdata-you-attribute-name
Odpowiedzi:
Użyj
setAttribute
metody:Ale naprawdę powinieneś używać danych zakończonych myślnikiem i ich właściwości, takich jak:
Aby to zrobić w JS, użyj
dataset
właściwości:źródło
Użyj zbioru danych
więc w twoim przypadku do ustawienia danych:
źródło
Dla osób pochodzących z Google to pytanie nie dotyczy atrybutów danych - OP dodał niestandardowy atrybut do swojego obiektu HTML i zastanawiał się, jak go ustawić.
Jednakże, nie należy dodawać atrybutów niestandardowych do swoich właściwości - Państwo powinno użyć atrybutów danych - np OP powinien być stosowany
data-icon
,data-url
,data-target
, itd.W każdym razie okazuje się, że sposób ustawiania tych atrybutów przez JavaScript jest taki sam w obu przypadkach. Posługiwać się:
aby zmienić daną cechę
attributeName
dovalue
do elementu DOMele
.Na przykład:
Zauważ, że możesz również użyć
.dataset
do ustawienia wartości atrybutów danych, ale jak wskazuje @racemic, jest on o 62% wolniejszy (przynajmniej w Chrome na macOS w momencie pisania). Dlatego poleciłbymsetAttribute
zamiast tego użyć tej metody.źródło