Javascript:使用ID检索元素内的隐藏字段值

时间:2013-05-23 21:04:30

标签: javascript html input

猜猜我有这个

<td id="c1s2a"><input type="hidden" name="allow_move" value="1"></td>

如何访问元素&#39; allow_move&#39;用id c1s2a引用? 有许多allow_move命名输入,所以我不能使用document.getElementsByName(&#34; allow_move&#34;)。

我试过这个:document.getElementById("c1s2a").allow_move=0;但是没有用。 (是的,我想更改其值)

4 个答案:

答案 0 :(得分:4)

如果你真的只有td中的输入标签(没有其他文本,空格或标签),你可以简单地使用以下内容来获得对该元素的引用:

document.getElementById("c1s2a").firstChild;

设置其值:

document.getElementById("c1s2a").firstChild.value = 0;

还有一个名为firstElementChild的属性,它忽略文本节点和注释节点,但遗憾的是在版本9之前的IE中不支持。


现代浏览器的另一个选项是document.querySelector,它接受​​一个CSS选择器并返回一个DOM节点。 support table表示它是IE8 +,但我听说IE8存在一些兼容性问题。

示例:

document.querySelector("#c1s2a input").value = 0;

document.querySelector("#c1s2a input[name='allow_move']").value = 0;

答案 1 :(得分:3)

如果您不能依赖输入作为第一个孩子,请尝试:

document.getElementById("c1s2a").children["allow_move"]

请参阅http://jsfiddle.net/KemmU/

答案 2 :(得分:2)

我会发誓

document.getElementById("c1s2a").getElementsByName("allow_move")[0].value=0

会起作用,但正如this fiddle所示,它会为cell.getElementsByName !!!

提供未捕获的类型错误

这是一个我不太高兴的替代方案

window.onload=function() {
  var inputs = document.getElementsByName("allow_move");
    for (var i=0, n=inputs.length;i<n;i++) {
        console.log(inputs[i].parentNode.id)
        if (inputs[i].parentNode.id=="c1s2a") {
            inputs[i].value=0;
        }    
    }
}

答案 3 :(得分:0)

有多种方法可以做到这一点。一些比其他更有效。

var allow_moves = document.getElementsByName("allow_move");
var index=0;
for(var j=allow_moves.length; index<=j; index++)
{
    if(allow_moves[index]&&allow_moves[index].parentNode.id=='c1s2a')break;
}
if(index<allow_moves.length)console.log(allow_moves[index].value);


console.log(document.getElementById("c1s2a").firstElementChild.value);


console.log(document.getElementById("c1s2a").childNodes[1].value);


console.log(document.getElementById("c1s2a").children["allow_move"].value);


//because I like being difficult, and because you never should, here is the regex way
//get the value
console.log(document.getElementById("c1s2a").innerHTML.replace(/([\s\S]*value=\")([^"]*)([\s\S]*)/g,"$2"));
//replace the value
document.getElementById("c1s2a").innerHTML = document.getElementById("c1s2a").innerHTML.replace(/([\s\S]*value=\")([^"]*)([\s\S]*)/g,"$1"+newValue+"$3");