document.getElementById包含?

时间:2011-01-03 03:40:17

标签: javascript

任何机会都有解决这个问题的方法:

我的元素有ID,例如“x_y_z”。唯一的部分是“x_y”,因此没有两个项目具有相同的x和y组合。

然而,使用getElementById将不起作用,因为当我这样做时,我只有“x”和“y”部分而不是Z(将Z视为随机增量计数器)。

有解决方法吗?所以,当我有“x”和“y”时,我会说像getElementByIdContains(“x_y”)?

谢谢!

3 个答案:

答案 0 :(得分:8)

虽然以下答案表明jQuery的"attribute-starts-with selector"是正确的(并且很有用:一定要检查出来!),但这并不神奇。如果您还没有包含78k的JS来执行此查询,则没有理由。

document.getElementsByIdPrefix = function( idPrefix, tagName ){
  if (!tagName) tagName = '*';
  if (document.querySelectorAll){
    return document.querySelectorAll(tagName+"[id^="+idPrefix+"]");
  }else{
    var all = document.getElementsByTagName(tagName);
    var results = [];
    for (var i=0,len=all.length;i<len;++i){
      if (all[i].id.indexOf(idPrefix)==0) results.push(all[i]);
    }
    return results;
  }
}
...
var xys = document.getElementsByIdPrefix( 'x_y', 'input' );

使用jQuery或者这样,如果您可以提供所有元素将共享的标记名称,您将提高性能。

修改:添加了性能改进,以便在出现时使用document.querySelectorAll

答案 1 :(得分:3)

如果可以使用jquery,请使用jquery通配符选择器 -

$("input[id^=x_y]");

http://www.emadibrahim.com/2009/07/25/jquery-wildcard-selector/

否则,您必须获取(特定标记的)所有元素并检查它们是否匹配。

答案 2 :(得分:0)

看看jQuery库,它的选择器能够做你想要的。

http://api.jquery.com/category/selectors/