javascript - 在函数中,jQuery 选择器返回 PreviousObject 而不是所选对象

标签 javascript jquery css

我试图将我网站上的第二个菜单粘贴到顶部菜单,并且我在两个引导列(第 8 列和第 4 列)中有几个菜单。因此,虽然我在函数之外使用了 jQuery 选择器,但它运行良好。但是当我决定重构我的代码并创建一个将类作为参数的函数时,它实际上停止了正常工作。 元素 $element 只是一个类为“.navbar.navbar-default.stick-left”的 div 元素。

这里是代码:

var stickelement = function(classid) {
    $element = $(classid);
    console.log($element);
    if ($element.length) {

        elementOffset = $element.offset().top;

        $(window).scroll(function (e) {
            scrollTop = $(window).scrollTop() + $('.navbar.navbar-default.navbar-fixed-top').height();
            distance = elementOffset - scrollTop;

            if (distance < 0 && $element.css('position') != 'fixed') {
                $element.css({
                    'position': 'fixed',
                    'margin': '0px',
                    'top': ($('.navbar.navbar-default.navbar-fixed-top').height()).toString() + 'px'
                });
            }
            if (distance > 0 && $element.css('position') == 'fixed') {
                $element.css({'position': 'static', 'margin': '50px'});
            }
        });
    }
};

stickelement(".navbar.navbar-default.stick-left");

在重新加载页面后,我在我的控制台中只看到 n.fn.init[0] 在 proto 对象内部具有单元化的“top”字段且长度为 0。

我哪里弄错了?

最佳答案

所以,我解决了我的问题,但是第二个问题出现了。我正在尝试对 $(window).scroll 进行两次异步调用:

var stickelement = function(classid) {
    $element = $(classid);
    console.log($element);
    if ($element.length) {
        elementOffset = $element.offset().top;

        $(window).scroll(function (e) {
            scrollTop = $(window).scrollTop() + $('.navbar.navbar-default.navbar-fixed-top').height();
            distance = elementOffset - scrollTop;

            if (distance < 0 && $element.css('position') != 'fixed') {
                $element.css({
                    'position': 'fixed',
                    'margin': '0px',
                    'top': ($('.navbar.navbar-default.navbar-fixed-top').height()).toString() + 'px'
                });
            }
            if (distance > 0 && $element.css('position') == 'fixed') {
                $element.css({'position': 'static', 'margin': '50px'});
            }
        });
    }
};

stickelement('.stick-left');
stickelement('.stick-right');

但它们不能同时工作。两个菜单中只有一个可以通过这种方式固定在顶部。 如何更正我的解决方案以便将两个菜单粘贴到顶部菜单?

关于javascript - 在函数中,jQuery 选择器返回 PreviousObject 而不是所选对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544883/

相关文章:

javascript - 对象作为 React 子对象无效(React Navigation)

javascript - 我可以在不在 URL 中添加 '?callback=' 参数的情况下发出 jQuery JSONP 请求吗?

css - 寻找 nth-child 风格的表达

css - Yii 框架,找不到 CSS (404)

javascript - HTML 未加载 CSS,刷新后一切正常。同样在移动设备上,它在第一次加载时不起作用

javascript - 使用 Moment.js 从 UTC 格式化时间

javascript - jQuery 看不到我的 ID

javascript - 打字时用另一个文本区域更新一个文本区域

jquery - KEYUP 事件上的电子邮件验证不起作用

javascript - 如何在 Backbone View 中获取调整大小事件?