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() 从网络摄像头拍照