Javascript 显示具有公共ID的元素,隐藏其他元素

Javascript 显示具有公共ID的元素,隐藏其他元素,javascript,jquery,html,Javascript,Jquery,Html,我试图创建一个系统,当选择一个元素时,该系统显示相同ID的元素,同时隐藏上一个元素,而不隐藏该ID的所有实例(即,仅当存在某个类时才隐藏)。 第一部分(使元素“活动”并设置ID变量)工作正常,但我似乎无法使第二个元素停止使用“.hidden”类进行设置。 我在这部分使用的代码是 function showSelect() { select = $(".active").attr('id'); $(".items").addClass("hidden");

我试图创建一个系统,当选择一个元素时,该系统显示相同ID的元素,同时隐藏上一个元素,而不隐藏该ID的所有实例(即,仅当存在某个类时才隐藏)。 第一部分(使元素“活动”并设置ID变量)工作正常,但我似乎无法使第二个元素停止使用“.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
元素是合乎逻辑的。