ID数组 - 如何使用JavaScript / JQuery进行选择?

13

我有一个元素标识符数组,这些标识符是从一些服务器端验证返回的。这些ID没有以“#”为前缀。是否有jQuery方法可以直接通过它们的ID选择所有元素,而不必遍历数组并为每个成员添加“#”前缀?


你想要一个 jQuery 的答案,但选择了一个 JS 的答案 :( - Elzo Valugi
@Elzo,很遗憾没有一个令人满意的jq解决方案。 - James L
1
@Elzo,我认为他的解决方案是JS和jQuery的完美结合。既然JavaScript可以胜任,为什么要局限于仅使用jQuery呢?(挖掘过去的回忆 :)) - davidethell
6个回答

23
你可以像这样将它们连接起来:
var ids = ['div1', 'div2', 'div3'];

$('#' + ids.join(',#')).click(function() { alert('hi'); });

1
现在我们正在加速! - Alan Alcock

14

不要忘记使用“老式”的getElementById-它不需要对id进行哈希。然后只需将节点提供给jQuery即可获得jQuery对象:

var ids = ['jq-primarySearch', 'jq-n-CSS'];
var nodes = $.map( ids, function(i) { return document.getElementById(i) } );
var jqObj = $(nodes);

1
JavaScript 真的很差劲。$.map(ids, document.getElementById) 确实不起作用! - Oleh Prypin

4
在jQuery中,您可以像这样按ID选择:

$("[id=id_value]"); // returns 1 id

如果您将它们命名为id_1和id_2,您可以这样做。
$("[id^='id_]") // returns multiple 

4

(注意 - 我没有尝试过这个 - 这是我脑海中的想法)

假设你的数组是 "arr"。

你可以将字符串标识符的数组映射到jQuery对象的数组中,然后使用通常的jQuery选择器将它们全部连接起来,不是吗?

$($.map(arr, function(id) { return $('#' + id); }))

1

你可以自己进行节点选择,然后将结果包装起来:

$(document.getElementById(id))

使用变量选择器可以避免构造一个字符串选择器,jQuery 只需要解析它并执行相同的操作。此外,您不必担心转义字符,例如“:”和“.”,这些字符在 ID 中是有效的,但在选择器中表示其他含义。


0
如果您的ID是一个字符串,您可以像这样在jQuery中选择它。
$("#"+id); //gives you one element

如果您有多个类似的ID,则使用Elzo的建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接