如何在JavaScript中通过ID获取子元素?

Bur*_*jua 29 javascript jquery element

我有以下html:

<div id="note">
<textarea id="textid" class="textclass">Text</textarea>
</div>
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得textarea元素?我不能用document.getElementById("textid")

我现在这样做:

var note = document.getElementById("note");
var notetext = note.querySelector('#textid');
Run Code Online (Sandbox Code Playgroud)

但它在IE中不起作用(8)

我怎么能这样做?jQuery没问题

谢谢

Khe*_*hez 50

如果jQuery没问题,你可以使用find().它基本上等同于你现在这样做的方式.

$('#note').find('#textid');
Run Code Online (Sandbox Code Playgroud)

您还可以使用jQuery选择器基本上实现相同的功能:

$('#note #textid');
Run Code Online (Sandbox Code Playgroud)

使用这些方法来得到的东西,已经有一ID是那样的陌生,但我提供这些假设这不是真的,你计划如何使用它.

另外,您应该知道ID在您的网页中应该是唯一的.如果您计划使用具有相同"ID"的多个元素,请考虑使用特定的类名.


Gil*_*ain 5

这是一个纯JavaScript解决方案(没有jQuery)

var _Utils = function ()
{
    this.findChildById = function (element, childID, isSearchInnerDescendant) // isSearchInnerDescendant <= true for search in inner childern 
    {
        var retElement = null;
        var lstChildren = isSearchInnerDescendant ? Utils.getAllDescendant(element) : element.childNodes;

        for (var i = 0; i < lstChildren.length; i++)
        {
            if (lstChildren[i].id == childID)
            {
                retElement = lstChildren[i];
                break;
            }
        }

        return retElement;
    }

    this.getAllDescendant = function (element, lstChildrenNodes)
    {
        lstChildrenNodes = lstChildrenNodes ? lstChildrenNodes : [];

        var lstChildren = element.childNodes;

        for (var i = 0; i < lstChildren.length; i++) 
        {
            if (lstChildren[i].nodeType == 1) // 1 is 'ELEMENT_NODE'
            {
                lstChildrenNodes.push(lstChildren[i]);
                lstChildrenNodes = Utils.getAllDescendant(lstChildren[i], lstChildrenNodes);
            }
        }

        return lstChildrenNodes;
    }        
}
var Utils = new _Utils;
Run Code Online (Sandbox Code Playgroud)

使用示例:

var myDiv = document.createElement("div");
myDiv.innerHTML = "<table id='tableToolbar'>" +
                        "<tr>" +
                            "<td>" +
                                "<div id='divIdToSearch'>" +
                                "</div>" +
                            "</td>" +
                        "</tr>" +
                    "</table>";

var divToSearch = Utils.findChildById(myDiv, "divIdToSearch", true);
Run Code Online (Sandbox Code Playgroud)

  • document.getElementById是诅咒的解决方案!但是,如果您的元素尚未附加到文档中,则此方法无效.并且没有在所有元素上定义元素.getElementById.如果你可以用getElementById获得例外结果,那就去吧,但情况并非总是如此.关于对象原型,我接受你的评论,我编辑答案,所以函数不会成为对象方法的一部分,谢谢. (5认同)