Подтвердить что ты не робот

Как получить дочерний элемент по ID в JavaScript?

У меня есть следующий html:

<div id="note">
<textarea id="textid" class="textclass">Text</textarea>
</div>

Как я могу получить элемент textarea? Я не могу использовать document.getElementById("textid") для него

Теперь я делаю это так:

var note = document.getElementById("note");
var notetext = note.querySelector('#textid');

но он не работает в IE (8)

Как я могу это сделать? jQuery в порядке

Спасибо

4b9b3361

Ответ 1

Если jQuery в порядке, вы можете использовать find(). Это в основном эквивалентно тому, как вы это делаете прямо сейчас.

$('#note').find('#textid');

Вы также можете использовать селектор jQuery, чтобы в основном добиться того же:

$('#note #textid');

Использование этих методов для получения чего-то, у которого уже есть идентификатор, довольно странно, но я поставляет их, полагая, что это не так, как вы планируете его использовать.

На боковой ноте вы должны знать, что идентификатор должен быть уникальным на вашей веб-странице. Если вы планируете иметь несколько элементов с тем же "ID", подумайте об использовании определенного имени класса.

Ответ 2

Вот чистое решение 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;

Пример использования:

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);

Ответ 3

Использование jQuery

$('#note textarea');

или просто

$('#textid');

Ответ 4

$(selectedDOM).find();

функция ищет все объекты dom внутри выбранного DOM. т.е.

<div id="mainDiv">
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
    <div id="innerDiv">
         <a href="#">link</a>
         <p>Paragraph 3</p>
    </div>
</div>

здесь, если вы пишете;

$("#mainDiv").find("p");

вы получите элементы дерева p вместе. С другой стороны,

$("#mainDiv").children("p");

Поиск функции в только DOM файлах для выбранного объекта DOM. Таким образом, по этому коду вы получите только абзац 1 и абзац 2. Это так полезно, чтобы браузер не делал ненужного прогресса.

Ответ 5

(Dwell in atom)

<div id="note">

   <textarea id="textid" class="textclass">Text</textarea>

</div>

<script type="text/javascript">

   var note = document.getElementById('textid').value;

   alert(note);

</script>