function myFunction() {
var myList = document.getElementById("lst");
var myList_first = myList.firstChild.innerHTML;
var myList_last = myList.lastChild.innerHTML;
document.getElementById("res").innerHTML = '<b>Первый элемент в списке:</b>' + myList_first + '<br>' + '<b>Последний элемент в списке:</b>' + myList_last;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<ol id="lst">
<li id="li1">Кофе</li>
<li id="li2">Чай</li>
<li id="li3">Какао</li>
<li id="li4">Молоко</li>
<li id="li5">Сок</li>
</ol>
<button onClick="myFunction()">
Поиск первого и последнего элемента списка
</button>
<p id="res"></p>
</body>
</html>
Вам надо использовать firstElementChild и lastElementChild
function myFunction() {
var myList = document.getElementById("lst");
var myList_first = myList.firstElementChild.innerHTML;
var myList_last = myList.lastElementChild.innerHTML;
document.getElementById("res").innerHTML = '<b>Первый элемент в списке:</b>' + myList_first + '<br>' + '<b>Последний элемент в списке:</b>' + myList_last;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<ol id="lst">
<li id="li1">Кофе</li>
<li id="li2">Чай</li>
<li id="li3">Какао</li>
<li id="li4">Молоко</li>
<li id="li5">Сок</li>
</ol>
<button onClick="myFunction()">
Поиск первого и последнего элемента списка
</button>
<p id="res"></p>
</body>
</html>
На самом деле DOM внутри элемента ol устроен так:
firstChild и lastChild ссылаются на первого и последнего потомка соответственно независимо от типа — и в вашем случае это оказываются строки (пункты 1 и 11).
Вам следует использовать вместо них firstElementChild и lastElementChild — они пропускают строки и берут именно элементы (пункты 2 и 10).
Не пытайтесь решить проблему стиранием всех пробелов и переносов строк: некоторые браузеры просто оставят в DOM пустые строки вместо них.
Один из способов:
function myFunction() {
var myList = document.getElementById("lst").children;
var myList_first = myList[0].innerHTML;
var myList_last = myList[myList.length - 1].innerHTML;
document.getElementById("res").innerHTML = '<b>Первый элемент в списке: </b>' + myList_first + '<br>' + '<b>Последний элемент в списке:</b>' + myList_last;
}
Смотрите, как вариант решения:
function myFunction() {
var myList = document.getElementById("lst");
var myList_first = myList.firstChild.innerHTML;
var myList_last = myList.lastChild.innerHTML;
document.getElementById("res").innerHTML = '<b>Первый элемент в списке:</b>' + myList_first + '<br>' + '<b>Последний элемент в списке:</b>' + myList_last;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<ol id="lst"
><li id="li1">Кофе</li
><li id="li2">Чай</li
><li id="li3">Какао</li
><li id="li4">Молоко</li
><li id="li5">Сок</li
></ol>
<button onClick="myFunction()">
Поиск первого и последнего элемента списка
</button>
<p id="res"></p>
</body>
</html>
Я перенес закрывающую угловую скобку на новую строку.
Причина того, почему у вас это не работает:
т.к. нет переноса, появляется пробел между li-блоками на каждой строке. Поэтому первый и последний чайлд - #text Node (подробнее тут).
Перенос скобочек таким образом позволяет избежать появления этих пробелов (или можно просто все записать в одну строку).
Однако вариант с использованием firstElementChild является лучшим решением, ибо я не гарантирую работоспособность этого фикса в разных браузерах.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости