【发布时间】:2015-03-08 17:30:15
【问题描述】:
我想做两件事。第一件事是一个未知数量的元素的点击事件,稍后将被添加到 DOM 中,因为它会不断更新。
点击甚至看起来像这样并且当前正在工作。
$("#systemDetails").on("click", "#categoryToggle", function () {
$(this).closest('table').next().toggle("slow");
$(this).toggleClass("glyphicon-plus-sign glyphicon-minus-sign");
});
id 是 categoryToggle。
现在我想使用该 ID 引用每个单独的项目,但是当 ID 都相同时,您不能这样做。 .each() 将只返回具有该 ID 的第一个元素。
理想情况下,我希望我的第二段代码的行为如下: 在DOM的一部分被AJAX替换之前有一个保存功能,然后在替换之后我想调用这个:
function recallVis() {
$("#categoryToggle").each(function (index) {
if (categoryVis[index]) {
// hide
$(this).closest('table').next().hide();
} else {
// show
$(this).closest('table').next().show();
}
});
}
有没有办法遍历所有同名的 ID,或者遍历 ID 列表,例如,这种格式:ID1、ID2、ID3... 等等...并维护一个单击事件处理程序适用于 ID(number) 格式的所有项目?
如果我想使用 JQuery 的 .each() 方法,我是否会在选择器中使用类?
【问题讨论】:
-
见the jQuery docs。您可以使用“开头为”选择器来查找所有以某些常见字符集开头的
id。但是,每个id必须在页面上是唯一的。 -
ID不能相同;这就是为什么它被称为“ID”。在多个元素上使用相同的 ID 会导致文档无效。如果要识别元素组(或“类”),请使用类名,而不是 ID。你所拥有的可能会起作用,但下次 jQuery 或浏览器的下一个 dot 版本出来时就不起作用了。
-
"我是不是被类卡住了" - 为什么你认为使用类名是“卡住”,或者在某些方面低劣?
-
Sparky,看来你可能有答案了。你应该把它作为一个发布。如果我使用开头,它是否允许我访问它返回的项目的特定索引?我将如何合并它来创建一个以(“someID”)开头的点击事件?
-
TJ 将我的建议纳入他的回答中,所以我同意。是的,您可以在
.each()中获取索引。同样,请参阅文档:api.jquery.com/jquery.each
标签: javascript jquery ajax dom