用zepto创建的html对象没有得到id

时间:2013-02-26 11:52:39

标签: javascript dom zepto

当我使用zepto.js从HTML字符串创建一个元素时:

element = $("<ul />", {id:"myID"});
console.log(element);

id“myID”未添加到元素中。控制台输出是:

[<ul></ul>]

根据http://zeptojs.com/ - &gt; $()它应该得到一个id:

>// create element with attributes:
>$("<p />", { text:"Hello", id:"greeting", css:{color:'darkblue'} })
>//=> <p id=greeting style="color:darkblue">Hello</p>

知道出了什么问题吗?或者这可能是一个错误?

编辑:

我有点像这样自己解决了这个问题:

element.attr('id', 'myID');

尽管不采取这样的额外步骤会更好......

1 个答案:

答案 0 :(得分:1)

似乎在版本Zepto.js (1.0rc1)中,这个api没有被引入。

请参阅tag v1.0rc1

中的第152行第100-108行
dom = zepto.fragment(selector.trim(), RegExp.$1), selector = null

  zepto.fragment = function(html, name) {
    if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
    if (!(name in containers)) name = '*'
    var container = containers[name]
    container.innerHTML = '' + html
    return $.each(slice.call(container.childNodes), function(){
      container.removeChild(this)
    })
  }
master

第167行第110-128行

dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null

  zepto.fragment = function(html, name, properties) {
    if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
    if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
    if (!(name in containers)) name = '*'

    var nodes, dom, container = containers[name]
    container.innerHTML = '' + html
    dom = $.each(slice.call(container.childNodes), function(){
      container.removeChild(this)
    })
    if (isPlainObject(properties)) {
      nodes = $(dom)
      $.each(properties, function(key, value) {
        if (methodAttributes.indexOf(key) > -1) nodes[key](value)
        else nodes.attr(key, value)
      })
    }
    return dom
  }

另请阅读此issue。也许它会在1.0大的时候推出。

现在,在api可以工作之前,您可以使用以下代码执行此操作:

element = $("<ul />").attr({id:"myID"});