使用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;
}
...
答案 0 :(得分:16)
[]
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
注意,这是未经测试的,您可能必须转义[在选择器
中