【问题标题】:jQuery foo.html("<span>bar</span>") not changing foo[0], so what does it mean?jQuery foo.html("<span>bar</span>") 没有改变 foo[0],那是什么意思呢?
【发布时间】:2010-07-29 03:45:36
【问题描述】:

使用jQuery,在Firebug中,如果以下一一做:

foo = $('<div>foo</div>')

foo[0]  // => <div>

foo.html('<span>bar</span>')

foo.html()  // => "<span>bar</span>"

foo[0]  // => <div>

$('body').prepend(foo)  // => shows bar at top of page

奇怪的是foo.html()显示span,但是foo[0]显示div...为什么不一致?似乎foo 成为span 元素的jQuery 包装器。 foo[0] 不应该也显示span 吗?

【问题讨论】:

    标签: javascript jquery innerhtml


    【解决方案1】:

    html() 写入/读取&lt;div&gt; 元素的innerHtml 属性;它不会替换元素。你现在实际拥有的是&lt;div&gt;&lt;span&gt;bar&lt;/span&gt;&lt;/div&gt;。所以不,这不是特别奇怪的行为。 :)

    【讨论】:

      【解决方案2】:

      jQuery 对象上的索引访问器访问 jQuery 序列中的元素。在您的示例中,您创建了一个只有一个元素的 jQuery 序列 - div。您可以将 div 的内容设置为任何类型的复杂树,但它仍然只是一个元素。 html('')设置节点的内部内容,但外部节点保持不变。

      【讨论】:

      • 啊,好的,html() 或 innerHTML 是替换该节点下的所有内容,如 divOne.innerHTML = "click me"。 div 仍然存在。只是div 节点下的所有内容都被更改了。有时很容易忘记,尤其是在喝完啤酒之后。
      • @Jian Lin:继续喝,说不定就能达到鲍尔默巅峰:xkcd.com/323:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2013-02-02
      • 2017-08-04
      • 1970-01-01
      • 2020-06-08
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多