Javascript 在div标记中通过id获取元素的简单方法?
如果我重复这个问题,请原谅 我有HTML div标记中的所有元素都有不同的id,假设我已经获得了对div的引用,有没有简单的方法可以通过id获取元素,而不必使用该div迭代所有元素 以下是我的html示例:Javascript 在div标记中通过id获取元素的简单方法?,javascript,dom,Javascript,Dom,如果我重复这个问题,请原谅 我有HTML div标记中的所有元素都有不同的id,假设我已经获得了对div的引用,有没有简单的方法可以通过id获取元素,而不必使用该div迭代所有元素 以下是我的html示例: <div id="div1" > <input type="text" id="edit1" /> <input type="text" id="edit2" /> </div> <div id="div2" >
<div id="div1" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
<div id="div2" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
您不想这样做。具有多个具有相同
id
的元素是无效的HTML。浏览器不会很好地处理这一点,而且您会有未定义的行为,这意味着您不知道当您根据该id选择元素时,浏览器会给您什么,这可能是不可预测的
您应该使用一个类,或者只是迭代输入并跟踪索引
试着这样做:
var div2 = document.getElementById('div2');
for(i = j = 0; i < div2.childNodes.length; i++)
if(div2.childNodes[i].nodeName == 'INPUT'){
j++;
var input = div2.childNodes[i];
alert('This is edit'+j+': '+input);
}
#div1 .edit1
$("#div1 input").each(function(index) {
// do something with one of the input objects
});
<div id="div1" >
<input type="text" name="edit1" id="edit1" />
<input type="text" name="edit2" id="edit2" />
</div>
<div id="div2" >
<input type="text" name="edit1" id="edit3" />
<input type="text" name="edit2" id="edit4" />
</div>
var div2=document.getElementById('div2');
对于(i=j=0;i
不幸的是,这是无效的HTML。ID在整个HTML文件中必须是唯一的 当您使用Javascript的
document.getElementById()
时,它取决于浏览器,它将返回哪个元素,通常是第一个具有给定ID的元素
您将没有其他机会重新分配ID,或者使用
class
属性。给定ID在一页中只能使用一次。具有相同ID的多个对象是无效的HTML,即使它们位于页面的不同部分
您可以将HTML更改为:
<div id="div1" >
<input type="text" class="edit1" />
<input type="text" class="edit2" />
</div>
<div id="div2" >
<input type="text" class="edit1" />
<input type="text" class="edit2" />
</div>
在jQuery中打开:
$("#div1 .edit1")
或者,如果要迭代某个div中的项,可以这样做:
var div2 = document.getElementById('div2');
for(i = j = 0; i < div2.childNodes.length; i++)
if(div2.childNodes[i].nodeName == 'INPUT'){
j++;
var input = div2.childNodes[i];
alert('This is edit'+j+': '+input);
}
#div1 .edit1
$("#div1 input").each(function(index) {
// do something with one of the input objects
});
<div id="div1" >
<input type="text" name="edit1" id="edit1" />
<input type="text" name="edit2" id="edit2" />
</div>
<div id="div2" >
<input type="text" name="edit1" id="edit3" />
<input type="text" name="edit2" id="edit4" />
</div>
如果我不能使用像jQuery或YUI这样的框架,我会使用Sizzle并将其包含在选择器逻辑中(它与jQuery中的选择器引擎相同),因为使用好的选择器库可以大大简化DOM操作
如果我甚至不能使用Sizzle(这将大大降低开发人员的工作效率),那么可以使用普通DOM函数遍历给定元素的子元素
您将使用诸如childNodes或firstChild和nextSibling之类的DOM函数,并且您必须检查节点类型,以确保只获得所需的元素类型。我从不这样写代码,因为它的效率比使用选择器库要低得多。在HTML ID中应该是唯一的。我建议您将代码更改为以下内容:
var div2 = document.getElementById('div2');
for(i = j = 0; i < div2.childNodes.length; i++)
if(div2.childNodes[i].nodeName == 'INPUT'){
j++;
var input = div2.childNodes[i];
alert('This is edit'+j+': '+input);
}
#div1 .edit1
$("#div1 input").each(function(index) {
// do something with one of the input objects
});
<div id="div1" >
<input type="text" name="edit1" id="edit1" />
<input type="text" name="edit2" id="edit2" />
</div>
<div id="div2" >
<input type="text" name="edit1" id="edit3" />
<input type="text" name="edit2" id="edit4" />
</div>
您可以试试这样的方法 示例标记
<div id="div1" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
<div id="div2" >
<input type="text" id="edit3" />
<input type="text" id="edit4" />
</div>
演示:
就像
var e = GetElementInsideContainer("div1", "edit1");
示例Html代码
F1
F2
F3
类型
A.
B
C
Javascript
函数getVal()
{
var test=document.getElementById(“temp”).getElementsByTagName(“输入”);
警报(“输入元素数量”+测试长度);
对于(var i=0;i
或
或
或
例如
在core JS中实现OP所需的简单方法
document.getElementById(parent.id).children[child.id];
在整个DOM树中不能有多个id相同的元素…id
必须始终是唯一的。请不要使用此标记。这是无效的标记。正如@PaulPROs answer所示,您没有HTML。您有类似HTML的内容,但由于您有多个id相同的元素,因此无效。我知道id应该D是独一无二的。但出于某种原因,我不得不接受这种html。@eric如果你必须这样使用html,你仍然不能指望Javascript能很好地使用它。它提供了未定义的行为。我在下面提供了一个小脚本,它循环通过div2的直接子元素,并向你提供每个元素。我不能使用jQ或者,你能在不使用任何框架的情况下显示javascript代码吗?我是javascript新手。为什么不使用类名而不是id。谢谢你的代码。似乎迭代是唯一的方法,对吗?你更喜欢使用类而不是id吗?鉴于你已经更改了标记以保持id唯一,这种循环似乎有点毫无意义。如果你已经知道的话子元素的ID为什么不直接使用getElementById()获取它
?如果只是在它是特定div的子项时才返回它,您仍然可以先获取子项,然后检查其父项。为完整性起见,如果有人在查找此项,则会在第一个项中提供第一个标记名与类名匹配的项,如果没有匹配项,则提供一个空对象。