以下是我的表单示例(仅我想要的输入,但还有很多其他表单):
<form name="inputform" action="..." method="post">
<input type="hidden" name="id_qtedje_77" id="id_qtedje_77" value="0">
<input type="text" id="id_qte_77" name="prestation_detail_fields[77][qte_collecte]" value="0.00">
<input type="text" id="id_rec_77" name="prestation_detail_fields[77][reliquat_conforme]" value="0.00">
<input type="text" id="id_ren_77" name="prestation_detail_fields[77][reliquat_non_conforme]" value="0.00">
<input type="checkbox" name="prestation_detail_fields[77][dechet_non_present]" value="1">
<!-- another TR -->
<input type="hidden" name="id_qtedje_108" id="id_qtedje_108" value="0">
<input type="text" id="id_qte_108" name="prestation_detail_fields[108][qte_collecte]" value="0.00">
<input type="text" id="id_rec_108" name="prestation_detail_fields[108][reliquat_conforme]" value="0.00">
<input type="text" id="id_ren_108" name="prestation_detail_fields[108][reliquat_non_conforme]" value="0.00">
<input type="checkbox" name="prestation_detail_fields[108][dechet_non_present]" value="1">
</form>
我想要的是获取输入的值,但由于表单是用PHP构建的,我不知道行标识符(77,108)。
有没有办法做getElementByName('id_qtedje_%')
?
注意:我没有使用任何库,我也不打算使用它。
答案 0 :(得分:39)
你最好的选择可能是document.querySelectorAll
,你可以使用任何CSS选择器,包括像input[id^="id_qtedje_"]
这样的"attribute starts with" selector。这是supported on all modern browsers, and also IE8:
var elements = document.querySelectorAll('input[id^="id_qtedje_"]');
如果您只想要第一个匹配(而不是列表),则可以使用document.querySelector
代替。它返回对文档顺序中第一个匹配的引用,如果没有匹配则返回null
。
或者,您可以为元素指定一个类名,然后使用document.getElementsByClassName
,但请注意,虽然旧版本的Chrome和Firefox支持getElementsByClassName
,但IE8却没有,所以它是not as well-supported是现代时代更有用的querySelectorAll
。
var elements = document.getElementsByClassName("theClassName");
如果您使用任何库(jQuery,MooTools,Closure,Prototype等),它们可能会有一个函数,您可以使用它来查找任何CSS选择器的元素,填补浏览器支持的空白他们自己的代码。例如,在jQuery中,它是$
(jQuery
)函数;在MooTools和Prototype中,它是$$
。
答案 1 :(得分:10)
您可以使用starts with selector
中的jQueryvar listOfElements = $('[name^="id_qtedje_"]')
感兴趣
使用querySelectorAll
,您可以
document.querySelectorAll( '[名^ = “id_qtedje _”]')
可替换地:
假设所有元素都是input
s,您可以使用:
function getElementByNameStart(str){
var x=document.getElementsByTagName('input')
for(var i=0;i<x.length;i++){
if(x[i].indexOf(str)==0){
return x[i];
}
}
}
可以称为getElementByNameStart(“id_qtedje _”)
请注意,这仅返回此类型的 first 元素。要全部退货:
function getElementByNameStart(str){
var x=document.getElementsByTagName('input')
var a=[];
for(var i=0;i<x.length;i++){
if(x[i].indexOf(str)==0){
a.push(x[i])
}
}
return a;
}
如果元素是任何类型,请将“input”替换为“*”(注意,这可能会使您的代码变慢)