Vanilla Javascript函数在JsFiddle上工作,但不在现场工作
Vanilla Javascript function working on JsFiddle but not on site?
我有一个奇怪的问题,我写了一个在jsFiddle上运行良好的函数,但是当我用HTML编写它时,没有任何反应...
var el = document.querySelectorAll(".sp-methods li:first-child");
for (i = 0; i < el.length; i++) {
alert('sad')
el[i].style.display='none';
}
我的完整网页是
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script>
/*if(!window.location.href.indexOf("gpf") > 0){
alert('contains gpf, show 4-6 days');
} else {*/
var el = document.querySelectorAll(".sp-methods li:first-child");
for (i = 0; i < el.length; i++) {
alert('sad')
el[i].style.display='none';
}
/*}*/
</script>
</head>
<body>
<ul class="sp-methods">
<li class=" ">Hide me</li>
<li class=" ">Dont hide me</li>
</li>
</ul>
</body>
</html>
然而它在这里有效,我不知道为什么?
JSFiddle Link
把你的javascript代码(script)放在body标签的末尾(ul标签之后)
当你还没有 DOM 时,你正在head
运行脚本,称为渲染阻塞 JavaScript。只需移动它,并将其包裹在ready
中即可获得良好的措施。观察以下内容...
<body>
<ul class="sp-methods">
<li class=" ">Hide me</li>
<li class=" ">Dont hide me</li>
</ul>
<script>
document.addEventListener('DOMContentLoaded', function(){
var el = document.querySelectorAll(".sp-methods li:first-child");
for (i = 0; i < el.length; i++) {
alert('sad')
el[i].style.display='none';
}
}, false);
</script>
</body>
有几种方法可以在 DOM 准备就绪时运行脚本。请参阅SO问题纯JavaScript等同于jQuery的$.ready()如何在页面/dom准备好时调用函数 - 有关此主题的完整讨论
JSFiddle Link - 更新的小提琴
作为观察,您的标记中有一个额外的结束</li>
我的建议是你看看这篇文章的第一个答案:纯JavaScript相当于jQuery的$.ready()如何在page/dom准备好时调用函数
您在这里有两个问题:
1)你在代码之前有脚本,所以DOM还没有准备好。
2)你的脚本只有几行代码,没有什么可以强制它执行的。我建议使用 IIFE 模式 (function() {....})() 或文档加载
Jsfiddle为您做了这两件事,这就是它在那里工作的原因。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript setInterval在localhost上工作,但确实'Don’我不在现场工作
- 谷歌地图在本地工作,但当我搬到现场时,它显示空页面
- flexislider无法在现场工作,图像没有旋转,但导航点正在改变
- Highcharts在jsfiddle上工作,但在现场失败
- Vanilla Javascript函数在JsFiddle上工作,但不在现场工作
- 现场的 HTML 5 音频控件无法正常工作
- MongoDB / mongab Remove请求在本地工作,但在现场时删除数据库
- JavaScript工作在小提琴,但不是在现场
- 为什么我的javascript在现场停止工作,但在测试环境中工作得很好
- Fancybox打开问题-在JSFiddle上工作,但不能在现场环境中工作
- 现场Javascript不能在Electron中工作,但可以在其他任何地方工作
- jQuery代码在测试中工作,但不是在现场
- Fancybox不在现场工作,但在本地工作
- 代码不在 JSFiddle 中运行,但在现场工作
- OnClick操作不会't不能同时工作,但只能用于第一次装载.包括现场示例