Javascript 基于ID值选择DOM元素

Javascript 基于ID值选择DOM元素,javascript,Javascript,我在DOM里有一些文本框 <INPUT id=txtQuantity587117 /> <INPUT id=txtQuantity587118 /> <INPUT id=txtQuantity587119 /> <INPUT id=txtQuantity587111 /> <INPUT id=txtQuantity587112 /> 这些元素都是嵌套的,不在任何特定的父节点下 是否有一种方法可以选择id文本以txtQuantity开头

我在DOM里有一些文本框

<INPUT id=txtQuantity587117 />
<INPUT id=txtQuantity587118 />
<INPUT id=txtQuantity587119 />
<INPUT id=txtQuantity587111 />
<INPUT id=txtQuantity587112 />
这些元素都是嵌套的,不在任何特定的父节点下

是否有一种方法可以选择id文本以txtQuantity开头的所有输入元素


我想要一种使用javascript而不是Jquery的方法。谢谢。

在现代浏览器和IE8中。。。现在验证您可以使用document.queryselector所有属性都以选择器开头

var els = document.querySelectorAll("input[id^=txtQuantity]");
没问题

var inputs = document.getElementsByTagName("input");
var matches = [];

for(var i = 0; i < inputs.length; i++){
    var input = inputs[i];
    if(input.id.indexOf("txtQuantity") == 0){
        matches.push(input);
    }
}

//matches will be an array of the matched elements

这里有一些代码不依赖于除Array.filter之外的任何现代API调用,Array.filter比document.queryselectoral更容易填充:

使用适当的垫片,这应该适用于MSIE 5.5以后的任何浏览器


请参见

-您不能更改代码以在其上添加类吗?检索它们会更简单、更快。使用一个类会更有意义,但我认为其他两个答案应该考虑在标记的答案之上。非常确定[]。将此值设置为NodeList或HTMLCollection或任何非本机集合的切片在IE8及更低版本中将失败。尽管这完全没有必要。您可以将此值设置为.filter。既然你要给它加垫片,它就会起作用。非常适合我的场景。非常感谢。在ie9+上工作。ie8支持css2选择器并且^=不在css2规范中:@CoryDanielson:您确定这适用于.queryselectoral吗?在IE8中,它支持样式表支持的更广泛的选择器数组。MDN的文档说明querySelectorAll只支持IE8中的CSS2选择器@科里丹尼尔森:是的,看起来你是对的。我会更新的。谢谢你提供的信息。@CoryDanielson:奇怪的是,我刚刚用开发人员工具在IE8浏览器和文档模式下进行了测试,效果很好。甚至我找到的MSDN页面也不完全清楚这一点。
var els = [].filter.call(document.getElementsByTagName('input'), function(el) {
    return /^txtQuantity/.test(el.id);
});