2014-04-03 168 views
0

我們通過從JSON文件中提取數據來創建HTML頁面。這工作正常,我們正在動態創建一個使用jQuery Mobile的信息可摺疊列表。爲什麼我無法訪問HTML div/jQuery對象的屬性?

現在我們試圖獲取每一位數據的偏移屬性,以便我們可以直接從其他頁面鏈接到它。

問題是我們似乎無法掌握偏移值。使用此代碼:

var entry = $("#" + glosID); 
    console.log(entry); 
    var offsetJS = entry.offsetTop; 
    var offsetJQ = entry.offset().top; 
    console.log("Offset from top(JS): " + offsetJS); 
    console.log("Offset from top(jQuery): " + offsetJQ); 

輸出是

Offset from top(JS): undefined 
Offset from top(jQuery): 0 

我注意到,檢查控制檯的對象表明,它具有結構:

div.0: listofproperties 

所以,我想

​​

現在我得到:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'offset' 

最後我嘗試這樣做:

var offsetJS = entry[0].offsetTop; 
    var offsetJQ = entry[0].draggable; 

現在,這是有趣的。我選擇了「可拖動」,因爲它是我發現的第一個簡單的財產。我用很多其他我發現的東西測試了它們,它們都工作。與此代碼我得到:

Offset from top(JS): 0 
Offset from top(jQuery): false 

我測試許多其它性質的使用[0]通知(例如的namespaceURI),爲我清楚地訪問在陣列中的第一個對象。但嘗試,因爲我可能無法獲得偏移量,也沒有任何其他與偏移相關的屬性(如offsetHeight)。但是,我可以獲得其他數字,如nodeType。

這到底是怎麼回事? jQuery手機搞亂了什麼?

+0

你知道jQuery對象和DOM元素有什麼區別嗎? – epascarello

+0

如果該元素在_collapsible_中並且它是_collapsed_,offset()。top將返回0,因爲它是隱藏的。選中這個[demo](http://jsfiddle.net/Palestinian/tXg7x/)向下滾動並點擊帶紅色邊框的單詞。 – Omar

+0

該元素不在可摺疊狀態,它是您單擊以打開摺疊狀態的可摺疊標題文本。 –

回答

0

jQuery實例和DOM對象不是一回事。 $("#" + glosID)爲您提供了一個jQuery實例,它具有方法offset;它包含一個DOM元素(提供了id的匹配項),它具有屬性offsetTop。所以:

var entry = $("#" + glosID); 
var offsetJS = entry[0].offsetTop; // Note the [0], to get the contained DOM element 
var offsetJQ = entry.offset().top; // No [0] on this one, we're using the jQuery instance 
console.log("Offset from top(JS): " + offsetJS); 
console.log("Offset from top(jQuery): " + offsetJQ); 

jQuery的實例是包裝器套DOM元素(當然,通常的DOM元素;還有一些邊緣的情況下的jQuery對象周圍其他事情包裝)。 jQuery實例可能包含零個或多個DOM元素。如果您需要訪問jQuery對象中的DOM元素,可以使用括號表示法和基於0的索引(因此第一個包含的元素位於[0],第二個位於[1]等)。

的「吸氣」 jQuery的實例函數(如offset())將獲得從該組中的第一元素中的信息,如果jQuery的實例是不是空的(他們通常返回undefined如果設置爲空)。 (相比之下,「setter」方法將集合中的所有元素的值設置爲。)

+0

那麼我該如何獲得偏移值呢?如果我使用offset()。top嘗試從第一個元素(這是我需要的)獲取值,我得到0.我知道這是不正確的,因爲我可以看到控制檯中的值。 –

+0

@SubjectiveEffect:'$(...)。offset()。top'會給你集合中第一個匹配元素相對於文檔的偏移量。請注意,這與'offsetTop'不同,後者相對於偏移父級(而不是文檔)。與jQuery相同的是'.position()。top'。 –

+0

雖然它不起作用,只給出0.正如你可以從我的第一個代碼示例中看到的。 –