看起来你有一些需要澄清的误解。别担心,你显然是在正确的轨道上。
首先,您需要像这样将调用包装在 document.ready 事件中。
<script type="text/javascript">
$(document).ready(function() {
var buttons = $("#buttons").find("a");
$("buttons").click(function() {
var id = $(this).attr("id");
$("pages id").css("display", "none");
$("pages id:eq("+id+")").css("display", "block");
});
});
</script>
这样做的原因是因为您的 HTML 是按顺序呈现的,也就是说,它会逐行读取它。当您的 javascript 代码执行时,尚未呈现按钮的 HTML,因此它不知道您在说什么。另请注意,就绪事件处理程序的构造几乎与单击事件处理程序相同。您只是对不同的对象进行操作并使用不同的事件。
下一个问题是您似乎在为选择器的工作方式而苦苦挣扎。
var buttons = $("#buttons").find("a");
您实际上在这里使用了两个选择器。$() 和 .find() 做几乎完全相同的事情。然而,jQuery 对象选择器用于查询整个文档,而 find 用于查询子集。因此,对于您要尝试执行的操作,这将更合适:
var buttons = $("a");
这只是说“选择所有锚标签”。When a selector does not start with a special character it is simply looking for tags of that type. # 字符查询所有具有 id 和 . character 查询该类的所有元素。因此,您的第一条语句实际上是在查询 ID 为“buttons”且不存在的任何元素。
最后,你不需要为你想要做的事情创建一个 var ,为了简单起见,我们将摆脱那条线并继续点击处理程序。
<script type="text/javascript">
$(document).ready(function() {
$("a").click(function() {
var id = $(this).attribute("id");
$("pages id").css("display", "none");
$("pages id:eq("+id+")").css("display", "block");
});
});
</script>
下一个问题是您将 ID 属性用作数据字段。不要这样做。如果您需要在其标签中存储有关元素的信息,请使用以前缀“data-”开头的自定义属性。所以在这种情况下,让我们改变你的锚标签。
<div id="buttons">
<a href="#" data-id="0" class="mybutton myred">Div 1</a>
<a href="#" data-id="1" class="mybutton myblue">Div 2</a>
<a href="#" data-id="2" class="mybutton myblue">Div 3</a>
</div>
这样好一点。现在我们在 div 上遇到了同样的问题。我们可以做同样的事情,但是因为我们要查询这些信息并且在类上使用选择器要容易得多,所以我们只根据 id 给 div 类。
<div id="pages">
<div class="mydivshow div1">1111</div>
<div class="mydivhide div2">2222</div>
<div class="mydivhide div3">3333</div>
</div>
现在我们可以回到 jQuery 并更改代码。
<script type="text/javascript">
$(document).ready(function() {
$("a").click(function() {
var id = $(this).attribute("data-id"); // Using a custom attribute.
$("#pages div").hide(); // gather all the div tags under the element with the id pages and hide them.
$(".div" + id).show(); // Show the div with the class of .divX where X is the number stored in the data-id of the object that was clicked.
});
});
</script>
那应该这样做!