2012-07-02 46 views
49

我使用的DynaTree(https://code.google.com/p/dynatree),但我有一些问题,并希望有人能帮助..设置数据属性使用JavaScript

我显示了树页面像下面的:

<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'"; 

谁知道我可能是做错了?

+2

关键字'data'是一个前缀。你应该使用'data-you-attribute-name' – MilkyWayJoe

+4

@Aaron你应该选择一个最好的答案。 – 0x499602D2

回答

115

使用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"; 
+8

如果仅考虑符合HTML5的浏览器,那么数据集属性可能会很有用,但这是一个简短的列表,并且需要更广泛的支持。我现在坚持使用* setAttribute *。 – RobG

+0

仍然无法通过使用document.getElementById('item1')。setAttribute('data',“icon:'base2.gif',url:'output.htm',target:'AccessPage',输出:'1'“); – Aaron

+0

你在你的代码中究竟做了什么,让你意识到它不工作? – 0x499602D2

29

请使用数据集

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

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

所以你的情况来设置数据:

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

另外(适当的时候),用驼峰指连字符的名(括号内的字符串失败)。 – jtheletter

+2

https://jsperf.com/html5-dataset-vs-native-setattribute这个建议的方法慢得多 – lxm7