我们通过从JSON文件中提取数据来创建HTML页面。这很好用,我们使用jQuery Mobile动态创建一个包含信息的可折叠列表。
现在我们正在尝试获取每个数据位的偏移属性,以便我们可以直接从其他页面链接到它。
问题是我们似乎无法掌握抵消价值。使用此代码:
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
所以我试过
var offsetJS = entry[0].offsetTop;
var offsetJQ = entry[0].offset().top;
现在我得到了:
Uncaught TypeError: Object #<HTMLDivElement> has no method 'offset'
最后我试了一下:
var offsetJS = entry[0].offsetTop;
var offsetJQ = entry[0].draggable;
现在这很有趣。我选择了&#34; draggable&#34;因为这是我发现的第一个简单的财产。我和很多我发现的其他人一起测试了它们,它们都有效。有了这段代码,我得到了:
Offset from top(JS): 0
Offset from top(jQuery): false
我使用[0]通知(例如namespaceURI)测试了很多其他属性,因为我清楚地访问了数组中的第一个对象。但尝试我可能无法获得偏移量,也没有任何其他与偏移量相关的属性(如offsetHeight)。但是,我可以获得其他数字,例如nodeType。
这里发生了什么? jQuery手机搞乱了吗?
答案 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实例是围绕 sets 的DOM元素的包装器(好吧,通常是DOM元素;还有一些边缘情况,其中jQuery对象是围绕其他东西的包装器)。 jQuery实例可能包含零个或多个DOM元素。如果需要访问jQuery对象中的DOM元素,可以使用括号表示法和基于0的索引(因此第一个包含的元素位于[0]
,第二个位于[1]
,等等)。
jQuery实例的“getter”函数(如offset()
)将从集合中的 first 元素获取信息,如果jQuery实例不为空(它们通常会返回如果集合为空,则undefined
。 (相反,“setter”方法设置集合中所有元素的值。)