2014-04-03 127 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.正如你可以从我的第一个代码示例中看到的。 –