首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

classlist.toggle()在移动safari上不能正常工作

classList.toggle() 方法在移动 Safari 浏览器上可能无法正常工作的原因通常与浏览器的兼容性问题有关。classList.toggle() 是一个相对较新的 DOM API,虽然大多数现代浏览器都支持它,但在某些旧版本的移动 Safari 中可能存在兼容性问题。

基础概念

classList.toggle() 是一个用于在元素的类列表中添加或移除类的方法。如果指定的类已经存在于元素的类列表中,则该方法会将其移除;如果不存在,则会添加该类。

可能的原因

  1. 浏览器版本过旧:移动 Safari 的某些旧版本可能不完全支持 classList.toggle() 方法。
  2. JavaScript 异常:在执行 classList.toggle() 时,可能会抛出异常,例如由于 DOM 元素未正确加载或其他 JavaScript 错误。

解决方案

1. 检查浏览器版本

确保用户使用的移动 Safari 版本是最新的。可以通过以下方式检测浏览器版本并给出提示:

代码语言:txt
复制
if (navigator.userAgent.match(/Version\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/)) {
    var majorVersion = parseInt(RegExp.$1, 10);
    if (majorVersion < 14) {
        alert('请升级您的 Safari 浏览器以获得更好的体验。');
    }
}

2. 使用 Polyfill

如果需要支持旧版本的移动 Safari,可以使用 classList.toggle() 的 Polyfill:

代码语言:txt
复制
if (!('classList' in document.documentElement)) {
    Object.defineProperty(Element.prototype, 'classList', {
        get: function() {
            var self = this;
            function update(fn) {
                return function(value) {
                    var classes = self.className.split(/\s+/g),
                        index = classes.indexOf(value);

                    fn(classes, index, value);
                    self.className = classes.join(' ');
                };
            }

            return {
                add: update(function(classes, index, value) {
                    if (!~index) classes.push(value);
                }),

                contains: function(value) {
                    return !!~self.className.split(/\s+/g).indexOf(value);
                },

                item: function(i) {
                    return self.className.split(/\s+/g)[i] || null;
                },

                remove: update(function(classes, index) {
                    if (~index) classes.splice(index, 1);
                }),

                toggle: update(function(classes, index, value) {
                    if (~index) { classes.splice(index, 1); } else { classes.push(value); }
                })
            };
        }
    });
}

3. 使用 jQuery 等库

如果项目中已经使用了 jQuery 或其他类似的库,可以利用这些库提供的方法来替代 classList.toggle()

代码语言:txt
复制
// 使用 jQuery
$('#elementId').toggleClass('className');

// 使用原生 JavaScript 的 classList API
document.getElementById('elementId').classList.toggle('className');

应用场景

classList.toggle() 常用于需要在用户交互(如点击事件)中动态切换元素样式的场景,例如:

代码语言:txt
复制
<button id="toggleButton">Toggle Class</button>
<div id="targetElement" class="initial-class">Content</div>

<script>
document.getElementById('toggleButton').addEventListener('click', function() {
    document.getElementById('targetElement').classList.toggle('active-class');
});
</script>

在这个例子中,每次点击按钮时,targetElementactive-class 类会被添加或移除,从而改变元素的样式。

通过以上方法,可以有效解决 classList.toggle() 在移动 Safari 上无法正常工作的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个参数搞定 Docker 禁止单个容器访问外网

原理 在网上查阅了相关资料基本上都是直接把DNS设置一个不可用的就无法解析域名访问了,但是这样做直接通过IP地址访问还是禁止不了;还有一些方案是直接把docker容器的网卡改为 none,但是这样实现的话我自己内网要访问容器都没有办法...; 我要实现的需求是:容器可以访问内网所有资源,容器有ip地址提供我可以直接连接访问WEB页面,但是容器内不能访问所有的外网资源。...找了一圈之后最终是通过设置禁用容器网卡上的IP地址伪装选项来达到无法上外网的效果,访问内网就还是正常访问。...Bridge network driver | Docker Docs function Catalogswith(){document.getElementById("catalog-col").classList.toggle...("catalog");document.getElementById("catalog").classList.toggle("catalog")}

3.5K30
  • 终于修复了 Valine 评论在 Safari 不显示问题

    Valine & Safari 不知道使用 ios 设备的博友在浏览本站页面的时候有没有发现一个问题,所有页面评论模块都是不显示的!...(记得大胡子哥有评论提醒过我移动端不能评论,还问我是不是故意这样设置的,其实这就是个bug)通过 MAC 审查可以发现控制台报错了,似乎是一个正则语法问题,但这个问题一直以来都没有得到解决,直到今天为止...之后就一直拖着没管 问题根源 买了那个被背刺的 iPad 后,使用 Safari 的时候更多了,这时候在博客上查看评论就不行了,甚至有些写在 valine.js 内的调用功能都被阻塞不显示了,非常的恼火...没错,问题就在 /^*-+:*$/ 之间的空格没了,正常运行的应该像这样 c<s.align.length;c++)/^ *-+: *$/.test(s.align[c]) 上面代码修改了之后在...Safari 上就不会再报错了!

    12910

    你不应该依赖CSS 100vh,这就是原因!

    顺便说一下,它在安卓手机上甚至不能按预期工作。 图片 为什么100vh问题会发生在移动设备上? 我对这个问题进行了一番调查,发现了其中的原因。简短的答案是,浏览器的工具栏高度没有被考虑在内。...仅使用 CSS 在移动设备上修复 100VH 问题 时,使用 vh 的目的是为了简单地创建与视口高度相等的部分。例如,当你在建立登陆页面时,这很常见。...DOCTYPE html> 声明,会使 fill-available 在 Chrome 浏览器上无法正常工作。...图片 甚至不能在安卓浏览器上工作: 图片 因此,为了解决这个问题,必须从页面中删除 doctype 声明。 2....Safari上的垂直 padding 问题 在 min-height(或 height)为 fill-available的元素上添加垂直 padding (bottom 和 top),Safari浏览器上会导致问题

    1.3K40

    移动端网页调试

    在这个5g到来的时代,移动互联网继续横行,前端的开发工作和移动端更加紧密了,但是移动端调试着实让人尴尬。化解尴尬的方法介绍下下面这几种,有补充的欢迎留言?...缺点:仅仅用来模拟,并不能完全代表移动设备的真实状况。...使用IOS Safari + Mac OS Safari配合调试 这个方法对用MAC来办公的伙伴就比较友好了~ Apple允许开发者通过数据线连接的方式,在Mac OS的Safari里面调试iOS设备上的网页...但是这种方法在使用前,需要简单设置以下内容: 在iOS设备上,打开Safari的Web检查器,选择设置 -> Safari -> 高级 -> Web检查器命令。...(用到JavaScript的话,顺便在Web检查器同级上开启吧) 在计算机上的Safari启用开发菜单,选择偏好设置 -> 高级 -> 在菜单栏中显示'开发'菜单命令。

    1.4K30

    移动端Web开发调试之Weinre调试教程

    看着满满的测试汇总文档,我们曾经在一个又一个知名或不知名的手机终端上重复着这些工作:仔细的排查代码,alert可疑的变量,甚至不惜重构来尝试解决这种不一致的问题。...Weinre(WebInspector Remote)是一款基于Web Inspector(Webkit)的远程调试工具,借助于网络,可以在PC上直接调试运行在移动设备上的远程页面,中文意思是远程Web...检查器,有了Weinre,在PC上可以即时修改目标网页的HTML/CSS/JavaScript,调试过程可实时显示移动设备上页面的预览效果,并同步显示设备页面的错误和警告信息,可以查看网络资源的信息,不过...我在Chrome 38/39版本测试时打开Debug客户端出现页面白板,原因未知,了解原因的欢迎留言给我。换为Safari浏览器打开则正常。...在GitHub上搜索weinre的结果中前两个就是官方的Weinre项目。 ?

    2.2K20

    8 款浏览器兼容性测试工具介绍,需要的赶紧收藏吧!

    浏览器的兼容性问题,是指不同浏览器使用内核及所支持的 HTML 等网页语言标准不同,用户客户端的环境不同造成的显示效果不能达到理想效果。...为此,我们可以在多台计算机或者多台虚拟机上部署不同浏览器进行测试,但这种方法会造成一定的资源浪费、或存在卡顿情况。为提高测试效率,可以利用一些浏览器兼容性测试工具来完成测试工作。...//www.lambdatest.com/ 作为一款基于云的自动化跨浏览器测试平台,LambdaTest 提供了 2000 多种浏览器和操作系统的组合,确保网页在所有主要浏览器、浏览器版本、操作系统、移动设备和分辨率上都是跨浏览器兼容和响应的...不仅是在 Chrome 上,这个插件还在 Firefox、Safari、Internet Explorer、Edge、Android Chrome 和 iOS Safari 上截图。...支持 Chrome、Firefox、Safari、Edge、IE、Windows、OSX、iOS 等。也可以在真实的设备和浏览器上,运行各种 Selenium 和 Appium 类型的脚本。

    7.2K30

    Safari 版本更新?开发者的噩梦之旅!

    可以想见,Web 上其他依赖于 zip.js 的项目应该也受到了类似的影响。 我在 2 月 17 号上报了这个问题。...于是乎,我直到 4 月 3 号才真正能够验证对新版本做验证,这时候距离 Safari 16.4 的全球发布已经过去了整整一周。在这段时间里,我根本不知道自己的软件能不能在 Safari 上正常运行。...这个错不是苹果中的具体哪个人导致的——事实上,我在前文中也提到,很多苹果员工都把工作做得很好。苹果也绝对不乏聪明和勤奋的头脑。...WebM Opus 距离成功就只差一步了——所有浏览器均可支持,包括 macOS 上的 Safari,但就偏偏是 iOS 和 iPadOS 上的 Safari 不行。...我希望有更多朋友能意识到在 Safari 上正常运行有多么费劲,而且每一次版本更新会给生态系统中的合作伙伴造成怎样的“精神创伤”。

    53120

    移动web开发需要注意的二十点

    7、学会使用webkit-box 上一条,我们说过自适应布局模式,有些同学可能会问:如何在移动设备上做到完全自适应呢?...我们可以利用一句简单的javascript代码来实现这个效果 setTimeout(scrollTo,0,0,0); 请注意,这句代码必须放在window.onload里才能够正常的工作,而且你的当前文档的内容高度必须是高于窗口的高度时...10、如何禁止用户旋转设备 我曾经也想禁止用户旋转设备,也想实现像某些客户端那样:只能在肖像模式或景观模式下才能正常运行。但现在我可以很负责任的告诉你:别想了!在移动版的webkit中做不到!...至少Apple webapp API已经说到了:我们为了让用户在safari中正常的浏览网页,我们必须保证用户的设备处于任何一个方位时,safari都能够正常的显示网页内容(也就是自适应),所以我们禁止开发者阻止浏览器的...因为在iOS中没有滚动条的概念,在Android中通过这两个属性可以正常获取到滚动条的值,那么在iOS中我们该如何获取滚动条的值呢?

    1.9K20

    移动web真机调试方案

    : sunjianfeng@csxiaoyao.com QQ: 1724338257 对于前端开发来说,在pc端使用chrome等浏览器的开发者工具简直是好用到爆,Chrome手机模拟器可以帮助开发调试移动端...在菜单栏中显示开发" iPhone 设置:设置 -> Safari -> 高级 -> 打开 Web 检查器 通过手机的 Safari 来打开 H5 页面,然后将Mac上的Safari浏览器打开,选择开发...-> iPhone,就出现调试界面了,在iPhone上也能断点调试js了。...注意: Mac上可以使用Simulator模拟器(需要先安装Xcode),可以模拟调试多个版本iPhone手机,还可以配合Safari来调试页面,此模拟器的完成度几乎可以替代真机。...3. spy-debugger调试 然而,很多场景下Chrome/Safari的真机调试有局限性,例如:在微信或其他App/浏览器中打开的页面,由于不能直接在 chrome/safari 中打开,因此不能直接使用浏览器真机调试工具

    3K164

    WEBAPP开发技巧总结

    7、学会使用webkit-box 上一节,我们说过自适应布局模式,有些同学可能会问:如何在移动设备上做到完全自适应呢?...我们可以利用一句简单的javascript代码来实现这个效果 1 setTimeout(scrollTo,0,0,0); 请注意,这句代码必须放在window.onload里才能够正常的工作,而且你的当前文档的内容高度必须是高于窗口的高度时...10、如何禁止用户旋转设备 我曾经也想禁止用户旋转设备,也想实现像某些客户端那样:只能在肖像模式或景观模式下才能正常运行。但现在我可以很负责任的告诉你:别想了!在移动版的webkit中做不到!...至少Apple webapp API已经说到了:我们为了让用户在safari中正常的浏览网页,我们必须保证用户的设备处于任何一个方位 时,safari都能够正常的显示网页内容(也就是自适应),所以我们禁止开发者阻止浏览器的...因为在iOS中没有滚动条的概念,在Android中通过这两个属性可以正常获取到滚动条的值,那么在iOS中我们该如何获 取滚动条的值呢?

    2K20

    看了180分钟的视频,写了半天的代码

    看能消灭多少个气球【笑哭】:http://sandbox.runjs.cn/show/luderhbq 然后,一起来一步步构建自己的【气球大战】(文中代码为核心代码,后续有优化,故非完整代码),可以在runjs...3.气球向上移动 创建一个move方法并在初始化后调用 气球移动代码 move();//移动气球 只需要调用一次即可 function move(){ var bl=bnElements.length...核心代码终于写完,在我的纯静态工具站点生成二维码扫一扫,在我的小米手机上玩了玩,ok正常,然后再新入手的ipad中试了试。。。擦。坑爹呢,点了咋没反应啊。...好吧,为了ipad能玩,强忍着泪水(饿的)解决了iOS的safari兼容问题~ 5.解决遇到的safari浏览器兼容问题 问题一:Safari中单击事件不能绑定到document.body上~~,因为无效...1000/60就不会参数丢帧的情况 时间线偏移(甚至重叠没执行完就执行下一次任务了),若需要每次都执行完才执行下次任务则使用setTimeout+递归 this的传递(可以使用bind()去绑定this,不能使用

    72220

    网页中添加下划线的方法汇总及优缺点

    优点 易于使用 位于文本基线以下 默认在 Safari 和 iOS 上会避开下行字母 可以换行 适用于任意背景 缺点 在其它浏览器中不能避开下行字母 不能改变颜色、粗细或样式 border-bottom...在 IE、Edge 和 Safari 上的浏览器支持有问题。很难在 CSS 中测试 SVG 滤镜的支持情况。...这意味着在修改完善之前还不能用在任何项目中。 这种方法作为概念证明有必要提出来。 可以创建漂亮、可交互的下划线,但是需要写一些 JavaScript 才能正常工作。...这一属性比预期的浏览器支持要好——它可以在 Firefox 以及 Safari (需加前缀)中工作。需要注意的是:如果没有清除下行字母,Safari 中的下划线会位于文本之上。 Firefox: ?...这是一个非标准属性,只在 Safari 中正常工作,所以要加 -webkit- 前缀。Safari 默认使用该属性,所以即使没有设置,下划线也会避开下行字母。

    2.6K100

    推荐一款纯离线OCR识别开源软件

    推荐理由 此款软件本人已经使用将近3周,识别速度确实快,关键是个开源项目,不存在需要上传图片上云再识别,即便在不联网的情况也能使用(亲测断网也能正常识别),数据完全在本地处理,针对一些在断网开发不允许连接外网的小伙伴是一个不错的选择...90 120 65 63 170 400 平均单张耗时(秒) 0.9 1.2 0.65 0.63 1.7 4.0 内存占用峰值(MB) 1000 350 1200 1700 5800 500 结论: 在启用...在该问题解决之前,Umi-OCR发行版提供原始版本模型。...准备 截图识别 粘贴图片到软件 批量识别本地图片文件 效率测试 参考链接 function Catalogswith(){document.getElementById("catalog-col").classList.toggle...("catalog");document.getElementById("catalog").classList.toggle("catalog")}

    9.2K40

    Flask session cookie 失效在Safari中的解决方法

    这种方法通常在各种浏览器中工作良好,但有时可能会在 Safari 中遇到 session cookie 失效的问题,特别是使用了 iOS 或 macOS 上的 Safari。...以下是一些解决方法:1、问题背景最近在使用 Flask 开发 web 应用时,遇到了一个奇怪的问题:在 macOS 上运行 Flask 应用,所有浏览器都能正常设置 session cookie。...但在 Windows 服务器上运行时,Safari(以及 iOS)却无法设置 session cookie,而其他浏览器仍然可以正常工作。..."en"> WubwubJojo为什么这个代码在所有浏览器上都能正常工作...而且,相同的代码在 macOS 上运行时(无论是在本地还是远程访问),都能正常工作,但是在 Windows 上却不行?其他所有浏览器在 Windows 上都能正常使用(即使是从外部访问)。

    10610

    H5 notification浏览器桌面通知

    会返回一个实例,如下: const instanceNotification = new Notification(title, options) instanceNotification就是当前通知的实例,在该实例上...通知的配置: 在通知实例上可以读取到设置通知时的所有配置,比如: 通知标题: instanceNotification.title、通知内容: instanceNotification.body、通知图标...例如:用定时器5秒后才监听通知的点击和显示事件,则永远不会触发通知显示的回调,点击事件在5秒后才可以正常起作用但会错误五秒之前用户的点击。...在safari浏览器下,没有关闭请求权限的选项,用户必须选择同意/拒绝。 icon不显示问题: 可能是网站进行了同源限制(比如github),不是域名下面的图片,会报错,不能调用。...(在safari下正常出现) safari下面不能显示icon 在safari下面,同一个网站(比如谷歌),同样的代码,chorme可以正常显示icon,safari却没有icon,也没有报错。

    1.8K40

    移动web真机调试方案

    目前已经有不少移动端的真机调试工具,本人在综合使用后推荐以下两类调试方案:chrome/safari真机调试 和 spy-debugger调试。 1....在菜单栏中显示开发" iPhone 设置:设置 -> Safari -> 高级 -> 打开 Web 检查器 通过手机的 Safari 来打开 H5 页面,然后将Mac上的Safari浏览器打开,选择开发...-> iPhone,就出现调试界面了,在iPhone上也能断点调试js了。...注意: Mac上可以使用Simulator模拟器(需要先安装Xcode),可以模拟调试多个版本iPhone手机,还可以配合Safari来调试页面,此模拟器的完成度几乎可以替代真机。...3. spy-debugger调试 然而,很多场景下Chrome/Safari的真机调试有局限性,例如:在微信或其他App/浏览器中打开的页面,由于不能直接在 chrome/safari 中打开,因此不能直接使用浏览器真机调试工具

    1.4K30

    官网改版项目问题总结

    1、Safari浏览器不能自动播放视频 这次官网首页是有一个内嵌视频,正常情况下给video标签加上autoplay属性就能加载完自动播放了,但是实际发现Safari不会,查询了解到新版Safari禁用了自动播放...2、移动端浏览器对video标签兼容不好 在查看移动端效果的时候,发现多个浏览器对video标签做了自动置顶,也就是跳出正常布局,显示在页面最顶层,而且就算不置顶,当点击播放以后也会跳出布局,后来我在网上查了很多资料...,也想了很多办法,由于我用的原生的video标签,所以考虑使用video.js等几个有名的第三方库试试,结果并不令人满意,这些库在pc端很完美,但是移动端并不理想,而我苦苦寻找没有发现有效的解决办法,最后和...3、首页视频加载慢的优化方案 在pc端,由于视频有4M,加载完成之前,视频区域会产生空白,移动端gif也很大,也有同样问题,于是选择在页面开始加载占位图,等待MP4加载完成或GIF加载完成后再展示。...这里有个细节,由于页面是后台渲染,所以用户在页面间跳转的时候实际是刷新了页面,这时候为了利用缓存,我们要区分用户首次加载页面和刷新页面这两种操作。

    1.1K20
    领券