Javascript:获取id为id [x]的所有元素

时间:2010-09-15 12:25:58

标签: javascript

使用javascript如何获取id为[x]?

的元素数量

示例HTML:

<input name="vrow[0]" id="vrow[0]" value="0" type="text"/>
<input name="vrow[1]" id="vrow[1]" value="0" type="text"/>
<input name="vrow[2]" id="vrow[2]" value="0" type="text"/>
<input name="vrow[3]" id="vrow[3]" value="0" type="text"/>

根据用户输入生成上述html。如何使用javascript检测存在多少元素?

目前,我可以检测到存在这样的元素

示例Javascript

if(document.getElementById('vrow[0]')){
var row=0;
    }
if(document.getElementById('vrow[1]')){
row=1;
    }
...

5 个答案:

答案 0 :(得分:16)

HTML4.01中的

[] are not valid characters in ID attributes。但是,即使在HTML5中,也应使用name属性(不带数字索引),然后使用getElementsByName()

<input name="vrow" value="0" type="text"/>
<input name="vrow" value="0" type="text"/>
<input name="vrow" value="0" type="text"/>
<input name="vrow" value="0" type="text"/>
var vrows = document.getElementsByName("vrow");
alert(vrows.length);

请注意,旧版本的IE和Opera可能会返回id属性的元素,这些属性的值与 getElementsByName()中指定的名称相同。 IE也可以返回具有相同值的name属性的非输入元素。

答案 1 :(得分:4)

var inputTags = document.getElementsByTagName('INPUT');
var count=0;
for(var i=0;i<inputTags.length;i++)
if(inputTags[i].id.contains('vrow[')
count++;

答案 2 :(得分:3)

如果由于某种原因你想要坚持输入元素的名称,你可以使用:

var inputs = Array.prototype.slice.call(document.getElementsByTagName('input'));
var rows = inputs.filter(function (el) { return el.name.indexOf('vrow[') == 0 });
alert(rows.length);

答案 3 :(得分:2)

getElementById总是返回一个元素(因为id是唯一的)。 getElementsByName可以生成元素列表。

<html>
<head>
 <script>
  function getElements() {
   var elements = document.getElementsByName("vrow[]");
   alert(elements.length);
  }
 </script>
</head>
<body onload="getElements()">
<input name="vrow[]" id="vrow_0" value="0" type="text"/>
<input name="vrow[]" id="vrow_1" value="0" type="text"/>
<input name="vrow[]" id="vrow_2" value="0" type="text"/>
<input name="vrow[]" id="vrow_3" value="0" type="text"/>
</body>
</html>

答案 4 :(得分:2)

如果您使用带有支持CSS3的查询功能的JavaScript库,例如Prototype,您可以使用属性starts-with selector来查找以vrow开头的id属性[

所以在Prototype中这将是

$$('input[id^=vrow[]').each

注意,这是未经测试的,您可能必须转义[在选择器

Prototype $$ function