Как получить доступ к HTML-элементу без идентификатора?

Например, в приведенном ниже фрагменте - как мне получить доступ к элементу h1, зная идентификатор родительского элемента (внутренний div-заголовок)?

<div id='header-inner'> 
   <div class='titlewrapper'> 
      <h1 class='title'> 
      Some text I want to change
      </h1> 
   </div> 
</div>

Спасибо!

Вы просто ищете потомка H1 данного DIV? Или вы хотите идентифицировать его по имени класса? Или вас конкретно интересует поиск элемента H1 с классом «title», который является дочерним элементом DIV с классом «titlewrapper», который, в свою очередь, является дочерним элементом DIV с идентификатором «header-inner»?

Shog9 25.10.2008 20:20

Я просто хочу получить h1 внутри div с заданным идентификатором (в моем случае внутренний заголовок)

JohnIdol 25.10.2008 20:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
23
2
74 335
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий
function findFirstDescendant(parent, tagname)
{
   parent = document.getElementById(parent);
   var descendants = parent.getElementsByTagName(tagname);
   if ( descendants.length )
      return descendants[0];
   return null;
}

var header = findFirstDescendant("header-inner", "h1");

Находит элемент с заданным идентификатором, запрашивает потомков с заданным именем тега, возвращает первый. Вы также можете зацикливаться на descendants для фильтрации по другим критериям; Если вы начнете двигаться в этом направлении, я рекомендую вам проверить готовую библиотеку, такую ​​как jQuery (это сэкономит вам много времени на написание этого материала, это становится несколько сложнее).

Ура, приятель - сценарий выглядит отлично, я попробую и помечу как ответ

JohnIdol 25.10.2008 20:43

Если вы уверены, что в вашем div только один элемент H1:

var parent = document.getElementById('header-inner');
var element = parent.GetElementsByTagName('h1')[0];

Перебирать потомков, как показал Shog9, тоже хороший способ.

Здесь я получаю значение элемента H1 в div, где элемент H1 с CSS class = "myheader":

var nodes = document.getElementById("mydiv")
                    .getElementsByTagName("H1");

for(i=0;i<nodes.length;i++)
{
    if (nodes.item(i).getAttribute("class") == "myheader")
        alert(nodes.item(i).innerHTML);
}      

Вот разметка:

<div id = "mydiv">
   <h1 class = "myheader">Hello</h1>
</div>

Я также рекомендовал бы использовать jQuery, если вам нужен тяжелый синтаксический анализ вашей DOM.

Самый простой способ сделать это с вашей текущей разметкой:

document.getElementById('header-inner').getElementsByTagName('h1')[0].innerHTML = 'new text';

Предполагается, что ваш тег H1 всегда является первым в элементе 'header-inner'.

И это должно быть: document.getElementById ('внутренний заголовок'). GetElementsByTagName‌ ('h1') [0] .forstChild‌ .nodeValue = 'новый текст';

roenving 26.10.2008 10:17

Чтобы получить дочерние узлы, используйте obj.childNodes, который возвращает объект коллекции.

Чтобы получить первого ребенка, используйте list[0], который возвращает узел.

Итак, полный код должен быть:

var div = document.getElementById('header-inner');
var divTitleWrapper = div.childNodes[0];
var h1 = divTitleWrapper.childNodes[0];

Если вы хотите перебрать все дочерние элементы, сравнивая, относятся ли они к классу «title», вы можете выполнить итерацию, используя цикл for и атрибут className.

Код должен быть:

var h1 = null;
var nodeList = divTitleWrapper.childNodes;
for (i =0;i < nodeList.length;i++){
    var node = nodeList[i];
    if (node.className == 'title' && node.tagName == 'H1'){
        h1 = node;
    }
}

Если бы вы использовали jQuery, как упоминалось в некоторых плакатах, вы могли бы получить доступ к элементу очень легко, например (хотя технически это вернет коллекцию совпадающих элементов, если бы было более одного потомка H1):

var element = $('#header-inner h1');

Использование такой библиотеки, как JQuery, делает подобные вещи тривиальными по сравнению с обычными способами, упомянутыми в других сообщениях. Затем, когда у вас есть ссылка на него в объекте jQuery, у вас появляется еще больше функций, позволяющих легко управлять его содержимым и внешним видом.

Другие вопросы по теме