为什么我无法访问HTML div / jQuery对象的属性?

时间:2014-04-03 12:47:52

标签: javascript jquery jquery-mobile object

我们通过从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手机搞乱了吗?

1 个答案:

答案 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”方法设置集合中所有元素的值。)