2012-12-12 63 views
1

我創造新的jQuery元素:發現()新創建的元素上不工作

var myJqEl = $('<div id="myDiv">Div content<span>Span content</span></div><p>P content</p>'); 

然後我用它查找方法:

var mynewEl1 = myJqEl.find('div').html(); // return null 
var mynewEl2 = myJqEl.find('span').html(); // return Span content 
var mynewEl3 = myJqEl.find('p').html(); // return null 

你能告訴我,爲什麼第一和第三返回null而第二個返回完整的內容?

謝謝。

+2

因爲你正在尋找一個'DIV'那是您使用的是搜索的jQuery對象。該DIV中沒有'DIV'或'P'。 –

+0

看到這個演示:http://jsfiddle.net/BG2FG/什麼是第一行日誌? –

+0

你可以發佈你的所有代碼嗎? – jackcogdill

回答

2

使用filterdivp代替:

var mynewEl1 = myJqEl.filter('div').html(); 
var mynewEl2 = myJqEl.find('span').html(); 
var mynewEl3 = myJqEl.filter('p').html();​ 
+0

謝謝JSang,這就是我需要的 – petwho

+0

@ 3dgoo謝謝,即將做同樣的事情:)。 –

1

,必須用你所有的HTML內容爲另一種元素,例如div之一。所以這個代碼:

var myJqEl = $('<div><div id="myDiv">Div content<span>Span content</span></div><p>P content</p></div>'); 

所以你必須要正確的元素,你可以使用它find方法。

詳細的解釋:

當您使用$新的元素,jQuery將創建一個對象,我們把它稱爲Wrapped Set。這個包裹設置實際上是一個JavaScript數組,所以當你創造的東西是這樣的:

$('<div id="myDiv">Div content<span>Span content</span></div><p>P content</p>'); 

你有兩個對象的數組:第一個,你div和第二個,p。在谷歌C​​hrome Web檢查,你會看到這樣的事情:

[<div id=​"myDiv">​…​</div>​, <p>​P content​</p>​] 

當您在包裹一套使用像find的方法,這將是在這個例子中執行的第一個元素時,div標籤。

這就是您的mynewEl2返回正確數據的原因。由於span標記存在於div(包裹集中的第一個元素) div標記本身沒有任何div標記。所以mynewEl1是空的。

而當您將所有HTML數據封裝到單個標記中時,您的包裝集只包含一個元素,並且您的所有HTML數據都將存在那裏。

0

根級有兩個不同的元素,如果你有一個包含這兩個元素的「根」,第一行和第三行將不會檢索null

例如,嘗試定義你的變量myJqEl這樣的:

var myJqEl = $('<div><div id="myDiv">Div content<span>Span content</span></div><p>P content</p></div>'); 
相關問題