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
является лучшим решением, ибо я не гарантирую работоспособность этого фикса в разных браузерах.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Необходимо сделать навигационное меню как на картинкеСтрого в центре экрана первый список меню, справа - другой
Мне нужно установить картинку в формате png на кнопку, как это можно сделать? Я имею ввиду, что мне нужно заменить стандартную текстуру кнопки...
Подскажите пожалуйста как сделать периодическое setTimeout(8 * 1000 ); обновление в таблице html, ну то есть в Mysql попала запись через какое то время...