jquery偏移方法并不总是有效/存在

时间:2014-01-02 15:30:14

标签: javascript jquery

大家早上好,新年快乐!

我遇到了一些障碍,需要找出解决方案或替代方案,我不知道如何解决这个问题。我实际上希望这很简单;意思是你们中的一个人已经处理过这个问题了。

问题在于我正在进行包含信息的翻转。他们是被移动到绝对位置的div。现在我用jquery 1.6 - 1.9.1尝试过这个。当然,这必须适用于多种浏览器。

需要发生的事情是翻转显示div,当你推出该div时,让它隐藏。

...
// .columnItem is class level and works
$(".columnItem").mouseleave(function() {
    $(this).css("display", "none");
});
...

$(".column").mouseenter(function() {
    var currentItem = $(this)[0]; // this is where the problem is

    // hide all .columnItems
    $(".columnItem").css("display", "none");

    // i get this error: Object #<HTMLDivElement> has no method 'offset' (viewing in chrome console)
    var offsetTop = currentItem.offset().top;

    var columnInfoPanel = $("#column" + currentItem.innerText);
});

因此,立即想到一些人不会使用$(this)[0]。相反,我应该使用$(this),你是对的!其他问题发生的地方是删除数组索引,currentItem.innerText现在是undefined

我唯一能想到的是我必须将它们混合在一起,但似乎应该有一种方法来使用选择器并获得两种选择。

你们都做了什么?

谢谢, 凯利

2 个答案:

答案 0 :(得分:0)

如你所说,在开头略过[0]。 但是然后将最后一行更改为:

 var columnInfoPanel = $("#column" + currentItem[0].innerText);

取消引用jQuery选择器为您提供DOM对象。 如果你想坚持使用纯jQuery,.text()/ .html()方法将为你提供相同的功能。

答案 1 :(得分:0)

替换:

var currentItem = $(this)[0];

使用:

var currentItem = $(this).eq(0);

这将创建一个仅包含第一个元素的新jQuery对象,因此offset将起作用。

然后您可以使用currentItem[0].innerTextcurrentItem.text(),无论您喜欢哪种方式。