对象的关键不需要 -

时间:2016-06-15 23:35:07

标签: javascript javascript-objects

我有一个函数,它根据参数

创建元素和设置属性
function createInfo( x , obj , text ){
   var element = document.createElement(x);
   if( obj ){
         var obj_child = Object.keys(obj);
         for( var i = 0; i < obj_child.length; i++){
            element.setAttribute(obj_child[i], obj[obj_child[i]]);
         }
   }
   if( text )
         element.innerHTML = text;
   return element;
}

它工作正常,但问题是当我传递“data-attribute”作为参数时, e.g

   var div =createInfo("div",{class:"left_info",data-index:index},null)

它抛出

  

意外的令牌 -

为什么不在密钥的名称中使用-?这有什么不对吗?

2 个答案:

答案 0 :(得分:3)

data-index对于JavaScript解析器看起来像“data减去index”,并且在那里没有意义。如果你想将它用作属性名称,请将其放在引号中,这就是告诉JavaScript它只是属性名称的方式:

var div =createInfo("div",{class:"left_info","data-index":index},null)
// ------------------------------------------^----------^

某些旧版浏览器可能还需要您将class放在引号中,原因完全不同:class是一个关键字。 (但现代版很好,因为它没有引号,JavaScript标准在2009年更新,以了解它不是那里的关键字。)

var div =createInfo("div",{"class":"left_info","data-index":index},null)

答案 1 :(得分:1)

尝试像这样定义对象:

var div =createInfo("div",{"class":"left_info","data-index":index},null)