<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;
但是没有用。
(是的,我想更改其值)
答案 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"]
答案 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");