iOS 无法在第一页加载时操作 jQuery DOM 更改

Posted

技术标签:

【中文标题】iOS 无法在第一页加载时操作 jQuery DOM 更改【英文标题】:iOS unable to manipulate jQuery DOM changes on the first page load 【发布时间】:2017-09-09 06:44:43 【问题描述】:

我在 ios 上的 Safari 遇到了一个奇怪的问题。 我正在使用 jQuery 来操作几个 div,移动它们,包装它们并赋予它们动态高度。在每个浏览器上,这些更改在第一页加载期间完美运行,在 Safari 上,有时是,有时不是。

基本上在 Safari 中,它加载页面而不应用任何更改,然后如果我不断刷新它,它永远不会工作,但如果我在地址栏上重新输入 url,然后我点击“输入”,那么它就会工作。

现在,我解决了它,将触发这些 DOM 操作的函数包装在一个 setTimeout 函数中,我给它一个 400 的延迟。所以现在它在触发该函数之前等待 400 毫秒,这样它就可以工作了,但我没有非常喜欢它。我想知道你们是否知道更好的系统。

我的代码:

    $('.wrap-services, .wrap-banner-cta, .wrap-logos, footer').wrapAll('<div class="fixer"></div>');
    $('.fixer').insertAfter('.content');

    function getHeight() 

        var imgOffset = $('.wrap-hero-home picture.splash-main img').offset().top;
        var fixerHeight = $('.fixer').height();
            imgHeight = $('.wrap-hero-home picture.splash-main img').height();

        $('.fixer').css('top', (imgOffset + imgHeight) + 50);

        $('.container').height((imgOffset + imgHeight + fixerHeight) + 50);
       


//this is what I use now to prevent that issue
setTimeout(getHeight, 400);

谢谢

【问题讨论】:

您是否只需要页面和所有资产完全加载?你也许可以这样做:$(window).load(function()/* Do something */); 我已经在 $(document).ready... DOM 已加载 我不认为你应该把那个里面的文件准备好,但我一直在用它自己的方式。也许值得一试。 如果我将功能从准备好的文档中移出,它根本不起作用。我试图将它包装在 $(window).load 中......但它根本不起作用 也许你应该展示一些 html 和 JS。毕竟,这是 Stack Overflow,一个获取代码帮助的网站 :) 【参考方案1】:

从技术上讲,jQuery 的绑定方法已被弃用,因此您可能应该使用on,就像他们建议的那样:

$(window).on('load', function()
    //Do something
);

请参阅此页面中与弃用相关的注释:http://api.jquery.com/bind/

如果您使用的是旧版本的 jQuery,我想没关系,然后继续使用bind

【讨论】:

以上是关于iOS 无法在第一页加载时操作 jQuery DOM 更改的主要内容,如果未能解决你的问题,请参考以下文章

覆盖在第一页加载时奇怪可见的 jQuery UI Datepicker div。

无法在第一页加载时在 Google Chrome 中使用 HTML5 和 getUserMedia() 从网络摄像头拍照

在第一页加载时反应不准确地计算 div 的高度

在第一页加载时从 createApi RTK 访问 localStorage

媒体查询在第一页加载时不起作用

iPhone仅在第一页隐藏导航栏