2010-07-29 39 views
1

使用jQuery,螢火蟲,如果下面做一個接一個:jQuery foo.html(「<span> bar</span>」)不改變foo [0],那麼它是什麼意思?

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也?

回答

2

html()寫入/讀取<div>元素的innerHtml屬性;它不會取代元素。你現在真正擁有的是<div><span>bar</span></div>。所以不,這不是特別奇怪的行爲。 :)

1

jQuery對象上的索引訪問器訪問jQuery序列中的元素。在你的例子中,你創建了一個只有一個元素的jQuery序列 - div。您可以將div的內容設置爲任何類型的複雜樹,但它仍然只是一個元素。 html('')設置節點的內部內容,但外部節點保持不變。

+0

ah,ok,html()或innerHTML將替換該節點下的所有內容,如divOne.innerHTML =「click me」。 'div'仍然存在。只是'div'節點下面的所有內容都被更改了。有時很容易忘記,尤其是在喝完啤酒之後。 – 2010-07-29 03:58:43

+1

@Jin Lin:繼續喝酒,你可能會到達鮑爾默高峯:http://xkcd.com/323/ :) – Faisal 2010-07-29 04:02:42