Javascript 显示具有公共ID的元素,隐藏其他元素
我试图创建一个系统,当选择一个元素时,该系统显示相同ID的元素,同时隐藏上一个元素,而不隐藏该ID的所有实例(即,仅当存在某个类时才隐藏)。 第一部分(使元素“活动”并设置ID变量)工作正常,但我似乎无法使第二个元素停止使用“.hidden”类进行设置。 我在这部分使用的代码是Javascript 显示具有公共ID的元素,隐藏其他元素,javascript,jquery,html,Javascript,Jquery,Html,我试图创建一个系统,当选择一个元素时,该系统显示相同ID的元素,同时隐藏上一个元素,而不隐藏该ID的所有实例(即,仅当存在某个类时才隐藏)。 第一部分(使元素“活动”并设置ID变量)工作正常,但我似乎无法使第二个元素停止使用“.hidden”类进行设置。 我在这部分使用的代码是 function showSelect() { select = $(".active").attr('id'); $(".items").addClass("hidden");
function showSelect() {
select = $(".active").attr('id');
$(".items").addClass("hidden");
$("#"+select).removeClass("hidden");
}
我已尝试使用$(选择)。删除。。。在第四行,以及什么是目前存在的,但没有用。
代码的其余部分可以在
我不确定我在这里做错了什么,JSHint没有报告任何类型的语法错误——因此我的方法肯定有错误。
如果这恰好有任何用处,Chrome会在$(“.items”).addClass(“hidden”)行报告一个“意外标识符”代码>
非常感谢您在这方面提供的任何帮助。正如巴尔马在评论中指出的那样,这根本不起作用,因为您不能在多个元素上拥有相同的id
。如果这样做,则文档无效,浏览器可以随意忽略id
值。(在实践中,它们通常表现为文档中只有具有给定id
值的第一个元素具有该id
,忽略后续元素。)
您似乎在相关元素上使用类项
,因此可以直接执行您希望执行的操作。假设showSelect
作为click
处理程序附加到相关元素,在showSelect
中,此
将是被单击的特定元素。因此:
// Hooking it up
$(".items").click(showSelect);
// The function
function showSelect() {
$(".items").not(this).addClass("hidden");
$(this).removeClass("hidden");
}
不需要id
s。id必须是唯一的,不能有具有相同id的元素。可以使用具有相同类的项目。正如巴尔马所说,id必须是唯一的。@巴尔马对此表示感谢,这是我所不知道的。这种行为可能解释了为什么我在过去遇到了很多涉及ID的问题。在这种情况下,我不能使用(这个),因为默认情况下,项
都设置为隐藏。虽然我可以在没有太多问题的情况下切换类的ID。但是,正如您之前所述,$(“#”+select)
将按预期工作,因此肯定$(““+select)
将以完全相同的方式工作。在这种情况下,如何将其作为一个类输出?或者,如果愿意(就良好实践等而言)使用
前缀保存变量,您可以分配var allItems=$(“.items”)代码>@user2957638:事实上,我误读了那句话<代码>选择=$(“.active”).attr(“id”)
将为您提供类处于活动状态的第一个元素的id
值(如果没有,则为未定义的)。我不明白你想干什么。如果要隐藏所有.items
元素,但.active
元素除外,则:$(.items”).not(.active”).addClass(“hidden”)$(.items.active”).removeClass(“隐藏”)代码>@Barmar对不起,我可能不太清楚。我的意思是把#1
改成.1
等等。我想做的是将变量保存为可以执行的$(选择)。removeClass(“隐藏”)
其中select
将是.1/2/3/…
,但实际上这并不重要。我的想法来自一个错误。我以前的方法简单得多:P@T.J.Crowder啊,一个诚实的错误。我使用了两个函数,第一个函数通过将其标记为“.active”来突出显示和元素。“As”.active”仅在选择某个元素时才可用。使用它来查找要从中删除.hidden
标签的.items
元素是合乎逻辑的。