1

当我使用 zepto.js 从 HTML 字符串创建元素时,如下所示:

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

id "myID" 不会被添加到元素中。控制台输出是这样的:

[<ul></ul>]

根据http://zeptojs.com/ -> $() 它应该得到一个 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');

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

4

1 回答 1

1

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

请参阅标签 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
  }

还阅读了这个问题。也许它会在大 1.0 的时候引入。

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

element = $("<ul />").attr({id:"myID"});
于 2013-02-27T03:09:33.220 回答