Javascript 在div标记中通过id获取元素的简单方法?

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" >

如果我重复这个问题,请原谅

我有HTML div标记中的所有元素都有不同的id,假设我已经获得了对div的引用,有没有简单的方法可以通过id获取元素,而不必使用该div迭代所有元素

以下是我的html示例:

<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的子项时才返回它,您仍然可以先获取子项,然后检查其父项。为完整性起见,如果有人在查找此项,则会在第一个项中提供第一个标记名与类名匹配的项,如果没有匹配项,则提供一个空对象。