我有一个只有一个元素的数组(最终我会扩展数组)。在一开始,弹出数组中的元素,然后程序发现元素与" F2",匹配,然后球出现。但是,球确实没有出现。我关心我的js代码因为我一起使用JS和jQuery。即使我可以将jQuery视为JS的库,但我不确定这是否是问题所在。我调试JS代码的方法是抛出一堆alert()
并尝试找到哪条线alert()
没有被调用,所以我知道有问题,但我再一次,我不确定如果它是最好的,因为JS中没有IDE。
$(document).ready(function() {
var notes = ["F2"];
if($("#" + notes.pop()).innerHTML == "F2") {
$("#F2").addClass("shown")
} else {
$("#F2").removeClass("shown");
}
});

#F2 {
width: 10px;
height: 10px;
background: #ccc;
border: 2px solid #ccc;
border-radius: 50%;
}
.not_shown {
display: none;
}
.shown {
display: block;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div id="ball">
<div id="F2" class="not_shown"></div>
</div>
&#13;
答案 0 :(得分:2)
我在代码中看到了一些问题。
首先$('#' + notes.pop()).innerHTML
不正确。它应该是$('#' + notes.pop()).html()
。
其次,F2
中没有文字div
。所以($('#' + notes.pop()).html() == 'F2')
将永远失败。
我稍微修改了一下。
#F2 {
width: 10px;
height: 10px;
background: #ccc;
border: 2px solid #ccc;
border-radius: 50%;
}
.not_shown {
display: none;
}
.shown {
display: block;
}
<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="code.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script type="text/javascript" src="code_js.js"></script>
</head>
<body>
<div id="ball">
<div id="F2" class="not_shown">F2</div>
</div>
</body>
</html>
<script>
$(document).ready(function() {
var notes = ["F2"];
debugger;
if ($('#' + notes.pop()).html() == 'F2') {
$('#F2').addClass('shown')
} else {
$('#F2').removeClass('shown');
}
});
</script>
答案 1 :(得分:2)
从你的问题我明白你想要弹出数组元素并将其与“F2”进行比较。如果它匹配,那么你想要改变div类。
以下是更正后的javascript代码。
$(document).ready(function() {
var notes = ["F2"];
if(notes.pop() === 'F2') {
$('#F2').addClass('shown')
} else {
$('#F2').removeClass('shown');
}
});
找到工作示例
答案 2 :(得分:2)
无需向div
添加内容,也无需与div内容进行比较。由于您是通过ID选择的,因此请继续比较ID。
$(document).ready(function() {
var notes = ['F2'],
$el;
// When selecting an element with jQuery, do it just once and
// then reference it as much as you want
$el = $('#' + notes.pop());
// Use strict comparison unless you have an excellent reason not to (rare)
if($el.get(0).id === 'F2') { // Just compare the ID, not sure why we need to even look at the content here
$el.addClass('shown');
} else {
$el.removeClass('shown');
}
});
至于调试,你应该使用浏览器DevTools来逐步完成代码。这样,您可以检查特定执行点的值,以便于调试。
答案 3 :(得分:1)
$(document).ready(function() {
var notes = ["F2"];
if($('#' + notes.pop()).innerHTML == 'F2') {
$('#F2').addClass('shown')
} else {
$('#F2').removeClass('shown');
}
});
我想你错过了选择器中的#
答案 4 :(得分:1)
你误解了“内部HTML”的使用情况。所以你可以试试这个。
$(document).ready(function() {
var notes = ["F2"];
if($('#' + notes.pop()).length) {
$('#F2').addClass('shown')
} else {
$('#F2').removeClass('shown');
}
});
&#13;
顺便说一句,最好使用chrome dev工具来调试js,比如设置断点等等。 :)