0

我正在尝试从 cookie 中恢复一个值,该值位于用户单击的 Y 轴上的某个位置。然后我想<h2>从该点击中找到父级(如果有帮助,所有<h2>s 都是 a 的第一个子级<div class="_bdnable_">)。这是我到目前为止所拥有的:

var bookmarkLocation;
function getBookmarkPos() {
    if ($.cookie("bookmark-position") !== null) { 
        $(".bdnable").each(function(i) {
            var scrollTopTop = $(this).offset.top;
            var scrollTopBottom = $(this).offset.top + $(this).height();
            // var screenWidth = parseInt(screen.width/2);
            // alert(screenWidth);
            // var bookmarkPosition = parseInt($.cookie("bookmark-position"));
            // alert(bookmarkPosition);
            // var query = document.elementFromPoint(screenWidth, 50).nodeName;
            // alert(query);
            if ($.cookie("bookmark-position")>=scrollTopTop && $.cookie("bookmark-position")<=scrollTopBottom) {
                bookmarkLocation = $(this).closest("div").children(":nth-child(1)").text();
            }
        });


        if (bookmarkLocation == null) {
            bookmarkLocation = "Unknown";
        }
    } else {
        bookmarkLocation = "No bookmark set";
    }

    $("#bookmarklocationspan").html(bookmarkLocation);
}

在注释掉的部分是我尝试使用getElementFromPoint然后意识到它只检查可见区域的地方。不好,因为页面上可滚动的 Y 轴是 1000 像素高。

任何想法都非常感谢!

4

1 回答 1

0

如果您已经从 cookie 中获得了点击的 y 坐标,为什么不简单地比较所有 H2 的 y 位置并选择下一个“更高”的位置呢?您的方法看起来像是比较用户是否直接点击了 H2 而不是它下面的文章/按钮?

只是一个想法 - 不要评价它的风格,认为它相当混乱:

var $myH2 = $('h2');
var clickY = <COOKIE_VALUE>;
var currentY = 0;
var foundH2ID = '';
for (var i = 0; i < $myH2.length; i++) {
 var h2Y = $($myH2[i]).position().top;
 if (h2Y <= clickY && h2Y > currentY) {
  currentY = h2Y;
  foundH2ID = $myH2[i].id;
 }
}

或者也许我误会了你?

于 2012-07-20T12:31:10.270 回答